You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2015/01/16 15:01:37 UTC
svn commit: r1652409 [1/18] - in /subversion/branches/svn-auth-x509: ./
notes/ subversion/bindings/swig/ subversion/bindings/swig/include/
subversion/bindings/swig/perl/native/ subversion/bindings/swig/perl/native/t/
subversion/bindings/swig/python/lib...
Author: brane
Date: Fri Jan 16 14:01:35 2015
New Revision: 1652409
URL: http://svn.apache.org/r1652409
Log:
On the svn-auth-x509 branch: Sync with trunk up to r1652406.
Added:
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/fs_id.c
- copied unchanged from r1652406, subversion/trunk/subversion/libsvn_fs_x/fs_id.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/fs_id.h
- copied unchanged from r1652406, subversion/trunk/subversion/libsvn_fs_x/fs_id.h
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnadmin_tests_data/load_txdelta.dump.gz
- copied unchanged from r1652406, subversion/trunk/subversion/tests/cmdline/svnadmin_tests_data/load_txdelta.dump.gz
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnrdump_tests_data/mergeinfo-contains-r0.dump
- copied unchanged from r1652406, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/mergeinfo-contains-r0.dump
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnrdump_tests_data/mergeinfo-contains-r0.expected.dump
- copied unchanged from r1652406, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/mergeinfo-contains-r0.expected.dump
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
- copied unchanged from r1652406, subversion/trunk/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.dump
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump
- copied unchanged from r1652406, subversion/trunk/subversion/tests/cmdline/svnsync_tests_data/mergeinfo-contains-r0.expected.dump
Modified:
subversion/branches/svn-auth-x509/ (props changed)
subversion/branches/svn-auth-x509/CHANGES
subversion/branches/svn-auth-x509/autogen.sh
subversion/branches/svn-auth-x509/get-deps.sh
subversion/branches/svn-auth-x509/notes/ (props changed)
subversion/branches/svn-auth-x509/notes/dump-load-format.txt
subversion/branches/svn-auth-x509/subversion/bindings/swig/include/svn_types.swg
subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Client.pm
subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Repos.pm
subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/1repos.t
subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/3client.t
subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/6ra.t
subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/core.py
subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/repos.py
subversion/branches/svn-auth-x509/subversion/bindings/swig/python/tests/repository.py
subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_client.i
subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_repos.i
subversion/branches/svn-auth-x509/subversion/include/mod_dav_svn.h
subversion/branches/svn-auth-x509/subversion/include/private/svn_fs_util.h
subversion/branches/svn-auth-x509/subversion/include/private/svn_mergeinfo_private.h
subversion/branches/svn-auth-x509/subversion/include/private/svn_wc_private.h
subversion/branches/svn-auth-x509/subversion/include/svn_fs.h
subversion/branches/svn-auth-x509/subversion/include/svn_io.h
subversion/branches/svn-auth-x509/subversion/include/svn_repos.h
subversion/branches/svn-auth-x509/subversion/include/svn_string.h
subversion/branches/svn-auth-x509/subversion/include/svn_version.h
subversion/branches/svn-auth-x509/subversion/include/svn_wc.h
subversion/branches/svn-auth-x509/subversion/libsvn_auth_gnome_keyring/gnome_keyring.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/add.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/commit_util.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/copy.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/diff.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/externals.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/info.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/locking_commands.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/log.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/merge.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/mergeinfo.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/mtcc.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/patch.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/update.c
subversion/branches/svn-auth-x509/subversion/libsvn_client/util.c
subversion/branches/svn-auth-x509/subversion/libsvn_delta/path_driver.c
subversion/branches/svn-auth-x509/subversion/libsvn_delta/text_delta.c
subversion/branches/svn-auth-x509/subversion/libsvn_diff/diff_file.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_base/fs.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_base/reps-strings.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/cached_data.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/caching.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/dag.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/dag.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/fs.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/fs_fs.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/index.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/lock.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/pack.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/pack.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/stats.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/transaction.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/tree.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_fs/verify.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_util/fs-util.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/ (props changed)
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/cached_data.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/cached_data.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/caching.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/changes.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/changes.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/dag.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/dag.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/fs.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/fs.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/fs_x.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/fs_x.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/hotcopy.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/hotcopy.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/id.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/id.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/index.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/index.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/lock.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/lock.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/low_level.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/low_level.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/noderevs.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/noderevs.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/pack.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/pack.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/recovery.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/recovery.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/rep-cache.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/rep-cache.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/reps.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/reps.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/rev_file.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/revprops.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/revprops.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/string_table.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/string_table.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/temp_serializer.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/temp_serializer.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/transaction.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/transaction.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/tree.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/tree.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/util.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/util.h
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/verify.c
subversion/branches/svn-auth-x509/subversion/libsvn_fs_x/verify.h
subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/options.c
subversion/branches/svn-auth-x509/subversion/libsvn_ra_serf/update.c
subversion/branches/svn-auth-x509/subversion/libsvn_repos/deprecated.c
subversion/branches/svn-auth-x509/subversion/libsvn_repos/dump.c
subversion/branches/svn-auth-x509/subversion/libsvn_repos/load-fs-vtable.c
subversion/branches/svn-auth-x509/subversion/libsvn_repos/log.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache-membuffer.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/cache_config.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/config.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/error.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/io.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/mergeinfo.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/string.c
subversion/branches/svn-auth-x509/subversion/libsvn_subr/sysinfo.c
subversion/branches/svn-auth-x509/subversion/libsvn_wc/conflicts.c
subversion/branches/svn-auth-x509/subversion/libsvn_wc/externals.c
subversion/branches/svn-auth-x509/subversion/libsvn_wc/node.c
subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc-queries.sql
subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db.c
subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db.h
subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db_private.h
subversion/branches/svn-auth-x509/subversion/libsvn_wc/wc_db_update_move.c
subversion/branches/svn-auth-x509/subversion/mod_authz_svn/mod_authz_svn.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/mod_dav_svn.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/deleted-rev.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/file-revs.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/get-location-segments.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/get-locations.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/get-locks.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/inherited-props.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/log.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/reports/mergeinfo.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/repos.c
subversion/branches/svn-auth-x509/subversion/mod_dav_svn/version.c
subversion/branches/svn-auth-x509/subversion/po/zh_CN.po
subversion/branches/svn-auth-x509/subversion/svn/conflict-callbacks.c
subversion/branches/svn-auth-x509/subversion/svndumpfilter/svndumpfilter.c
subversion/branches/svn-auth-x509/subversion/svnfsfs/stats-cmd.c
subversion/branches/svn-auth-x509/subversion/svnrdump/dump_editor.c
subversion/branches/svn-auth-x509/subversion/svnrdump/load_editor.c
subversion/branches/svn-auth-x509/subversion/svnrdump/svnrdump.c
subversion/branches/svn-auth-x509/subversion/svnserve/logger.c
subversion/branches/svn-auth-x509/subversion/svnserve/svnserve.c
subversion/branches/svn-auth-x509/subversion/svnsync/svnsync.c
subversion/branches/svn-auth-x509/subversion/svnsync/sync.c
subversion/branches/svn-auth-x509/subversion/tests/cmdline/basic_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/copy_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/externals_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/lock_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/patch_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/redirect_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnadmin_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svndumpfilter_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnrdump_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svnsync_tests.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/svntest/main.py
subversion/branches/svn-auth-x509/subversion/tests/cmdline/update_tests.py
subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs/fs-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/ (props changed)
subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_repos/dump-load-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/cache-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/config-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/mergeinfo-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_subr/string-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/op-depth-test.c
subversion/branches/svn-auth-x509/subversion/tests/libsvn_wc/wc-test.c
subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-sparc-solaris/svnbuild.sh
subversion/branches/svn-auth-x509/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh
subversion/branches/svn-auth-x509/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
subversion/branches/svn-auth-x509/tools/dev/unix-build/Makefile.svn
subversion/branches/svn-auth-x509/tools/hook-scripts/mailer/tests/mailer-init.sh
subversion/branches/svn-auth-x509/win-tests.py
Propchange: subversion/branches/svn-auth-x509/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jan 16 14:01:35 2015
@@ -20,6 +20,7 @@
/subversion/branches/fsfs-lock-many:1571740-1577217
/subversion/branches/fsfs-pack:873717-874575
/subversion/branches/fsx:1507845-1509914
+/subversion/branches/fsx-id:1645603-1649011
/subversion/branches/gnome-keyring:870558-871410
/subversion/branches/gpg-agent-password-store:1005036-1150766
/subversion/branches/gtest_addition:1452117-1502138
@@ -84,4 +85,4 @@
/subversion/branches/verify-at-commit:1462039-1462408
/subversion/branches/verify-keep-going:1439280-1546110
/subversion/branches/wc-collate-path:1402685-1480384
-/subversion/trunk:1603509-1640679
+/subversion/trunk:1603509-1652406
Modified: subversion/branches/svn-auth-x509/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/CHANGES?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/CHANGES (original)
+++ subversion/branches/svn-auth-x509/CHANGES Fri Jan 16 14:01:35 2015
@@ -298,6 +298,7 @@ http://svn.apache.org/repos/asf/subversi
* Allow PARALLEL value to specify the number of threads to run tests with,
PARALLEL=1 means to use the default (r1573320)
* pkg-config support for libsvn_* libraries (issue #4435)
+ * binaries built on Mac OS X 10.6+ will not run on older versions (r1651549)
- API changes:
* New RA callbacks for managing ra_svn tunnels:
@@ -315,7 +316,7 @@ http://svn.apache.org/repos/asf/subversi
* New api svn_io_file_aligned_seek() (r1502539)
* ra_svn: fix svn_ra_get_log*() to apply limit when server can't (r1503043)
* svn_client_commit6: notify which path prevents a mv commit (r1503662)
- * New apis svn_io_file_create_empty() and svn_io_file_create_binary()
+ * New apis svn_io_file_create_empty() and svn_io_file_create_bytes()
(r1505006)
* New api svn_ver_check_list2() (r1502267)
* svn_fs_paths_changed() gains support for moves (r1525448)
@@ -425,6 +426,52 @@ http://svn.apache.org/repos/asf/subversi
* javahl: support incomplete reads from streams (r1569631)
* javahl: allow revert API to take a set of paths (r1571461)
+
+Version 1.8.11
+(15 Dec 2014, from /branches/1.8.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.8.10
+
+ User-visible changes:
+ - Client-side bugfixes:
+ * checkout/update: fix file externals failing to follow history and
+ subsequently silently failing (issue #4185)
+ * patch: don't skip targets in valid --git difs (r1592014, r1592034)
+ * diff: make property output in diffs stable (r1589360)
+ * diff: fix diff of local copied directory with props (r1619380, r1619393)
+ * diff: fix changelist filter for repos-WC and WC-WC (r1621978, r1621981)
+ * remove broken conflict resolver menu options that always error out
+ (r1620332)
+ * improve gpg-agent support (r1600331, r1600348, 1600368, r1600563,
+ r1600781)
+ * fix crash in eclipse IDE with GNOME Keyring (issue #3498)
+ * fix externals shadowing a versioned directory (issue #4085)
+ * fix problems working on unix file systems that don't support
+ permissions (r1612225)
+ * upgrade: keep external registrations (issue #4519)
+ * cleanup: iprove performance of recorded timestamp fixups (r1633126)
+ * translation updates for German
+
+ - Server-side bugfixes:
+ * disable revprop caching feature due to cache invalidation problems
+ (r1543594, r1619774, r1619105, r1619118, r1619153, r1619802)
+ * skip generating uniquifiers if rep-sharing is not supported (r1561426)
+ * mod_dav_svn: reject requests with missing repository paths (r1643409)
+ * mod_dav_svn: reject requests with invalid virtual transaction names
+ (r1643437)
+ * mod_dav_svn: avoid unneeded memory growth in resource walking
+ (issue #4531)
+
+ Developer-visible changes:
+ - General:
+ * make sure all members of the repos layer notify struct are valid,
+ fixes crashes in API users using all members (r1616131)
+ * properly generate a version resource when building on Windows (r1542610,
+ r1564576, r1568180)
+ * fix LIBTOOL_M4 and LIBTOOL_CONFIG variable not be evaluated properly
+ during a unix build (r1637826)
+ * allow the use of libtool 2.4.3 (r1640862, r1640873, r1643793)
+
+
Version 1.8.10
(11 Aug 2014, from /branches/1.8.x)
http://svn.apache.org/repos/asf/subversion/tags/1.8.10
@@ -1156,6 +1203,39 @@ http://svn.apache.org/repos/asf/subversi
* fix some reference counting bugs in swig-py bindings (r1464899, r1466524)
+Version 1.7.19
+(15 Dec 2014, from /branches/1.7.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.7.19
+
+ User-visible changes:
+ - Client-side bugfixes:
+ * rm: display the proper URL in commit log editor (r1591123)
+ * diff: fix invalid read during suffix scanning (issue #4339)
+ * fix crash in eclipse IDE with GNOME Keyring (issue #3498)
+ * checkout/update: fix file externals failing to follow history and
+ subsequently silently failing (issue #4185)
+
+ - Server-side bugfixes:
+ * svnadmin dump: don't let invalid mergeinfo prevent a dump (issue #4476)
+ * mod_dav_svn: reject requests with missing repository paths (r1643409)
+ * mod_dav_svn: reject requests with invalid virtual transaction names
+ (r1643437)
+ * mod_dav_svn: avoid unneeded memory growth in resource walking
+ (issue #4531)
+
+ Developer-visible changes:
+ - General:
+ * properly generate a version resource when building on Windows (r1542610,
+ r1564576, r1568180)
+ * fix a problem with the unix build that could result in linking to the
+ wrong Subversion libraries at build or at run time (r1594157)
+ * use a proper intermediate directory when building with Visual Studio
+ 2003-2008 (r1595431)
+ * fix LIBTOOL_M4 and LIBTOOL_CONFIG variable not be evaluated properly
+ during a unix build (r1637826)
+ * allow the use of libtool 2.4.3 (r1640862, r1640873, r1643793)
+
+
Version 1.7.18
(11 Aug 2014, from /branches/1.7.x)
http://svn.apache.org/repos/asf/subversion/tags/1.7.18
Modified: subversion/branches/svn-auth-x509/autogen.sh
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/autogen.sh?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/autogen.sh (original)
+++ subversion/branches/svn-auth-x509/autogen.sh Fri Jan 16 14:01:35 2015
@@ -23,6 +23,10 @@
### Run this to produce everything needed for configuration. ###
+# Some shells can produce output when running 'cd' which interferes
+# with the construct 'abs=`cd dir && pwd`'.
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+
# Run tests to ensure that our build requirements are met
RELEASE_MODE=""
RELEASE_ARGS=""
@@ -72,48 +76,80 @@ rm -f build/config.guess build/config.su
$libtoolize --copy --automake --force
ltpath="`dirname $libtoolize`"
-ltfile=${LIBTOOL_M4-`cd $ltpath/../share/aclocal ; pwd`}/libtool.m4
-if [ ! -f $ltfile ]; then
- echo "$ltfile not found (try setting the LIBTOOL_M4 environment variable)"
+if [ "x$LIBTOOL_M4" = "x" ]; then
+ ltm4_error='(try setting the LIBTOOL_M4 environment variable)'
+ if [ -d "$ltpath/../share/aclocal/." ]; then
+ ltm4=`cd "$ltpath/../share/aclocal" && pwd`
+ else
+ echo "Libtool helper path not found $ltm4_error"
+ echo " expected at: '$ltpath/../share/aclocal'"
+ exit 1
+ fi
+else
+ ltm4_error="(the LIBTOOL_M4 environment variable is: $LIBTOOL_M4)"
+ ltm4="$LIBTOOL_M4"
+fi
+
+ltfile="$ltm4/libtool.m4"
+if [ ! -f "$ltfile" ]; then
+ echo "$ltfile not found $ltm4_error"
exit 1
fi
-echo "Copying libtool helper: $ltfile"
+echo "Copying libtool helper: $ltfile"
# An ancient helper might already be present from previous builds,
# and it might be write-protected (e.g. mode 444, seen on FreeBSD).
# This would cause cp to fail and print an error message, but leave
# behind a potentially outdated libtool helper. So, remove before
# copying:
rm -f build/libtool.m4
-cp $ltfile build/libtool.m4
+cp "$ltfile" build/libtool.m4
for file in ltoptions.m4 ltsugar.m4 ltversion.m4 lt~obsolete.m4; do
rm -f build/$file
if [ $lt_major_version -ge 2 ]; then
- ltfile=${LIBTOOL_M4-`cd $ltpath/../share/aclocal ; pwd`}/$file
+ ltfile="$ltm4/$file"
- if [ ! -f $ltfile ]; then
- echo "$ltfile not found (try setting the LIBTOOL_M4 environment variable)"
+ if [ ! -f "$ltfile" ]; then
+ echo "$ltfile not found $ltm4_error"
exit 1
fi
- echo "Copying libtool helper: $ltfile"
- cp $ltfile build/$file
+ echo "Copying libtool helper: $ltfile"
+ cp "$ltfile" "build/$file"
fi
done
if [ $lt_major_version -ge 2 ]; then
+ if [ "x$LIBTOOL_CONFIG" = "x" ]; then
+ ltconfig_error='(try setting the LIBTOOL_CONFIG environment variable)'
+ if [ -d "$ltpath/../share/libtool/config/." ]; then
+ ltconfig=`cd "$ltpath/../share/libtool/config" && pwd`
+ elif [ -d "$ltpath/../share/libtool/build-aux/." ]; then
+ ltconfig=`cd "$ltpath/../share/libtool/build-aux" && pwd`
+ else
+ echo "Autoconf helper path not found $ltconfig_error"
+ echo " expected at: '$ltpath/../share/libtool/config'"
+ echo " or: '$ltpath/../share/libtool/build-aux'"
+ exit 1
+ fi
+ else
+ ltconfig_error="(the LIBTOOL_CONFIG environment variable is: $LIBTOOL_CONFIG)"
+ ltconfig="$LIBTOOL_CONFIG"
+ fi
+
for file in config.guess config.sub; do
- configfile=${LIBTOOL_CONFIG-`cd $ltpath/../share/libtool/config ; pwd`}/$file
+ configfile="$ltconfig/$file"
- if [ ! -f $configfile ]; then
- echo "$configfile not found (try setting the LIBTOOL_CONFIG environment variable)"
+ if [ ! -f "$configfile" ]; then
+ echo "$configfile not found $ltconfig_error"
exit 1
fi
- cp $configfile build/$file
+ echo "Copying autoconf helper: $configfile"
+ cp "$configfile" build/$file
done
fi
Modified: subversion/branches/svn-auth-x509/get-deps.sh
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/get-deps.sh?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/get-deps.sh (original)
+++ subversion/branches/svn-auth-x509/get-deps.sh Fri Jan 16 14:01:35 2015
@@ -33,7 +33,7 @@
APR_VERSION=${APR_VERSION:-"1.4.6"}
APU_VERSION=${APU_VERSION:-"1.5.1"}
-SERF_VERSION=${SERF_VERSION:-"1.3.4"}
+SERF_VERSION=${SERF_VERSION:-"1.3.8"}
ZLIB_VERSION=${ZLIB_VERSION:-"1.2.8"}
SQLITE_VERSION=${SQLITE_VERSION:-"3.7.15.1"}
GMOCK_VERSION=${GMOCK_VERSION:-"1.6.0"}
Propchange: subversion/branches/svn-auth-x509/notes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jan 16 14:01:35 2015
@@ -36,4 +36,4 @@
/subversion/branches/tc_url_rev/notes:874351-874483
/subversion/branches/tree-conflicts/notes:868291-873154
/subversion/branches/tree-conflicts-notify/notes:873926-874008
-/subversion/trunk/notes:1603509-1639627
+/subversion/trunk/notes:1603509-1652406
Modified: subversion/branches/svn-auth-x509/notes/dump-load-format.txt
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/notes/dump-load-format.txt?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/notes/dump-load-format.txt (original)
+++ subversion/branches/svn-auth-x509/notes/dump-load-format.txt Fri Jan 16 14:01:35 2015
@@ -47,6 +47,8 @@ Dumpfiles include four record types. Tw
record, consist of single header lines. The bulk of a dumpfile
consists of Revision and Node records.
+==== Version stamp records ====
+
A version stamp record is always the first line of the file and
looks like this:
@@ -55,9 +57,11 @@ SVN-fs-dump-format-version: <N>\n
-------------------------------------------------------------------
where <N> is replaced by the dump format version. Except where
-specified, the descriptions in this document aapply to all
+specified, the descriptions in this document apply to all
versions of the format.
+==== UUID records ====
+
Versions 2 and later may have a UUID record following the version
stamp. It is of the form
@@ -68,12 +72,14 @@ UUID: <hex-string>
where the <hex-string> is the UUID of the originating repository.
An example UUID is "7bf7a5ef-cabf-0310-b7d4-93df341afa7e".
-A Revision record has three headers and is always followed by a
+==== Revision records ====
+
+A Revision record has three headers and is usually followed by a
property section. Expect the following form and sequence:
-------------------------------------------------------------------
Revision-number: <N>
-Prop-content-length: <P>
+[Prop-content-length: <P>]
Content-length: <L>
!
-------------------------------------------------------------------
@@ -87,42 +93,7 @@ that can parse RFC-822 messages.
A revision record is followed by one or more Node records (see below).
-=== Property sections ==
-
-A Revision record *must* have a property section, and a Node record *may*
-have a property section. Every record with a property section has
-a Prop-content-length header.
-
-A property section consists of pairs of key and value records and
-is ended by a fixed trailer. Here is an example attached to a
-Revision record:
-
--------------------------------------------------------------------
-Revision-number: 1422
-Prop-content-length: 80
-Content-length: 80
-
-K 6
-author
-V 7
-sussman
-K 3
-log
-V 33
-Added two files, changed a third.
-PROPS-END
--------------------------------------------------------------------
-
-The fixed trailer is "PROPS-END\n" and its length is included in the
-Prop-content-length. Before it, each K and V record consists of a
-header line giving the length of the key or value content in bytes.
-The content follows. The content is itself always followed by \n.
-
-In version 3 of the format, a third type 'D' of property record is
-introduced to describe property deletion. This feature will be
-described later, in the specification of delta dumps.
-
-=== Node records ===
+==== Node records ====
Each Revision record is followed by one or more Node records.
Node records have the following sequence of header lines:
@@ -168,7 +139,7 @@ this document.
The Text-content-{md5,sha1} and Text-copy-source-{md5,sha1} lines are
hash integrity checks and will be present only if Text-content-length
-and the copfyrom pair (respectively) are also present. A decoder may
+and the copyfrom pair (respectively) are also present. A decoder may
use them to verify that the source content they refer to has not been
corrupted.
@@ -185,6 +156,41 @@ copyfrom sources may also not have eithe
Again, the '!' stands in for a mandatory empty line following the
RFC822-style headers. A body may follow.
+=== Property sections ===
+
+A Revision record *may* have a property section, and a Node record *may*
+have a property section. Every record with a property section has
+a Prop-content-length header.
+
+A property section consists of pairs of key and value records and
+is ended by a fixed trailer. Here is an example attached to a
+Revision record:
+
+-------------------------------------------------------------------
+Revision-number: 1422
+Prop-content-length: 80
+Content-length: 80
+
+K 6
+author
+V 7
+sussman
+K 3
+log
+V 33
+Added two files, changed a third.
+PROPS-END
+-------------------------------------------------------------------
+
+The fixed trailer is "PROPS-END\n" and its length is included in the
+Prop-content-length. Before it, each K and V record consists of a
+header line giving the length of the key or value content in bytes.
+The content follows. The content is itself always followed by \n.
+
+In version 3 of the format, a third type 'D' of property record is
+introduced to describe property deletion. This feature will be
+described later, in the specification of delta dumps.
+
== Semantics ==
=== The kinds of things ===
@@ -339,9 +345,13 @@ to the same directory.
=== Properties and persistence ===
-The properties section of a Revision record consists of some subset
-of the three reserved per-commit properties: svn:author, svn:date,
-and svn:log. These properties do not persist to later revisions.
+The properties section of a Revision record consists of some (possibly
+empty) subset of the three reserved revision properties: svn:author,
+svn:date, and svn:log, along with any other revision properties.
+
+The revision properties do not persist to later revisions. Each revision
+has exactly the revision properties specified in its revision record, or
+no revision properties if there is no property section.
The key thing to know about Node properties is that they are
persistent, once set, until modified by a future property
@@ -449,7 +459,7 @@ Notice that this file has no properties.
Version 3 format is a delta dump; text changes are represented
as diffs against the original file, and properties as incremental
changes to a persistent set (that is, a property section does not
-necessarily implcitly clear the property set on a path before the
+necessarily implicitly clear the property set on a path before the
new property settings are evaluated).
This change is a space optimization. It requires additional
@@ -514,6 +524,15 @@ properties block.
This note is included for historical completeness only, at is it highly
unlikely that any Subversion instances that old remain in production.
+== Implementation choices for optional behaviour ==
+
+This section lists some of the ways existing implementations interpret the
+optional aspects of the specification.
+
+When a Revision record has no revision properties, svnadmin and svnrdump
+write an empty properties section whereas svndumpfilter omits the properties
+section. (At least in Subversion 1.0 through 1.8.)
+
== Ancient history ==
Old discussion:
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/include/svn_types.swg
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/include/svn_types.swg?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/include/svn_types.swg (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/include/svn_types.swg Fri Jan 16 14:01:35 2015
@@ -146,7 +146,8 @@
/* svn_repos */
svn_authz_t **,
svn_repos_t **,
- const svn_repos_parse_fns2_t **,
+ const svn_repos_parse_fns3_t **,
+ const svn_repos_parser_fns2_t **,
const svn_repos_parser_fns_t **,
void **parse_baton,
void **revision_baton,
@@ -806,20 +807,12 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
Callback: svn_cancel_func_t
*/
-#ifdef SWIGPYTHON
-%typemap(in) (svn_cancel_func_t cancel_func, void *cancel_baton) {
- $1 = svn_swig_py_cancel_func;
- $2 = $input; /* our function is the baton. */
-}
-#endif
+%callback_typemap(svn_cancel_func_t cancel_func, void *cancel_baton,
+ svn_swig_py_cancel_func,
+ svn_swig_pl_cancel_func,
+ svn_swig_rb_cancel_func)
#ifdef SWIGRUBY
-%typemap(in) (svn_cancel_func_t cancel_func, void *cancel_baton)
-{
- $1 = svn_swig_rb_cancel_func;
- $2 = (void *)svn_swig_rb_make_baton($input, _global_svn_swig_rb_pool);
-}
-
%typemap(argout) (svn_cancel_func_t cancel_func, void *cancel_baton)
{
svn_swig_rb_set_baton($result, (VALUE)$2);
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Client.pm
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Client.pm?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Client.pm (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Client.pm Fri Jan 16 14:01:35 2015
@@ -55,8 +55,7 @@ SVN::Client - Subversion client function
0, #no_auth_cache
0, #trust_server_cert
$config_category,
- undef, #cancel_func
- undef) #cancel_baton
+ undef) #cancel_callback
);
# Use first argument as target and canonicalize it before using
@@ -1286,24 +1285,8 @@ sub log_msg {
=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.
-
-The subroutine pointed to by this value will be called to see if the operation
-should be canceled. If the operation should be canceled, the function may
-return one of the following values:
-
-An svn_error_t object made with SVN::Error::create.
-
-Any true value, in which case the bindings will generate an svn_error_t object
-for you with the error code of SVN_ERR_CANCELLED and the string set to "By
-cancel callback".
-
-A string, in which case the bindings will generate an svn_error_t object for you
-with the error code of SVN_ERR_CANCELLED and the string set to the string you
-returned.
-
-Any other value will be interpreted as wanting to continue the operation.
-Generally, it's best to return 0 to continue the operation.
+pass. See L<"CANCELLATION CALLBACK"> below for details.
+It always returns the current codereference set.
=cut
@@ -1489,6 +1472,25 @@ may_save.
=back
+=head1 CANCELLATION CALLBACK
+
+This callback will be called periodically to see if the operation
+should be canceled. If the operation should be canceled, the function may
+return one of the following values:
+
+An svn_error_t object made with SVN::Error::create.
+
+Any true value, in which case the bindings will generate an svn_error_t object
+for you with the error code of SVN_ERR_CANCELLED and the string set to "By
+cancel callback".
+
+A string, in which case the bindings will generate an svn_error_t object for you
+with the error code of SVN_ERR_CANCELLED and the string set to the string you
+returned.
+
+Any other value will be interpreted as wanting to continue the operation.
+Generally, it's best to return 0 to continue the operation.
+
=head1 OBJECTS
These are some of the object types that are returned from the methods
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Repos.pm
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Repos.pm?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Repos.pm (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/Repos.pm Fri Jan 16 14:01:35 2015
@@ -42,9 +42,9 @@ object.
=over
-=item $repos-E<gt>dump_fs($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $cancel_func, $cancel_baton)
+=item $repos-E<gt>dump_fs($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $cancel_callback)
-=item $repos-E<gt>dump_fs2($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $deltify, $cancel_func, $cancel_baton)
+=item $repos-E<gt>dump_fs2($dump_fh, $feedback_fh, $start_rev, $end_rev, $incremental, $deltify, $cancel_callback)
Create a dump file of the repository from revision C<$start_rev> to C<$end_rev>
, store it into the filehandle C<$dump_fh>, and write feedback on the progress
@@ -61,10 +61,9 @@ this flag is set, the first revision of
be done with full plain text. A dump with @a use_deltas set cannot
be loaded by Subversion 1.0.x.
-According to svn_repos.h, the C<$cancel_func> is a function that is called
-periodically and given C<$cancel_baton> as a parameter to determine whether
-the client wishes to cancel the dump. You must supply C<undef> at the very
-least.
+If C<$cancel_callback> is not C<undef>, it must be a code reference
+that is called periodically to determine whether the client wishes
+to cancel the dump. See L<SVN::Client/"CANCELLATION CALLBACK"> for details.
Example:
@@ -83,13 +82,13 @@ Example:
$repos->dump_fs2($fh, \*STDOUT, # Dump file => $fh, Feedback => STDOUT
$start_rev, $end_rev, # Revision Range
$incremental, $deltify, # Options
- undef, undef); # Cancel Function
+ undef); # Cancel Callback
close $fh;
-=item $repos-E<gt>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_callback);
-=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);
+=item $repos-E<gt>load_fs2($dumpfile_fh, $feedback_fh, $uuid_action, $parent_dir, $use_pre_commit_hook, $use_post_commit_hook, $cancel_callback);
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,
@@ -113,11 +112,11 @@ hook before committing each loaded revis
If C<$use_post_commit_hook> is set, call the repository's
post-commit hook after committing each loaded revision.
-If C<$cancel_func> is not NULL, it is called periodically with
-C<$cancel_baton> as argument to see if the client wishes to cancel
-the load.
+If C<$cancel_callback> is not C<undef>, it must be a code reference
+that is called periodically to determine whether the client wishes
+to cancel the load. See L<SVN::Client/"CANCELLATION CALLBACK"> for details.
-You must at least provide undef for these parameters for the method call
+You must at least provide C<undef> for these parameters for the method call
to work.
Example:
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/1repos.t
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/1repos.t?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/1repos.t (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/1repos.t Fri Jan 16 14:01:35 2015
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
#
#
# Licensed to the Apache Software Foundation (ASF) under one
@@ -20,16 +20,21 @@
#
#
-use Test::More tests => 6;
+use strict;
+use warnings;
+
+use Test::More tests => 8;
use File::Temp qw(tempdir);
use File::Path qw(rmtree);
-use strict;
+use File::Spec;
+use POSIX qw(locale_h);
+
+use SVN::Core;
+use SVN::Repos;
+use SVN::Fs;
+use SVN::Delta;
-require SVN::Core;
-require SVN::Repos;
-require SVN::Fs;
-require SVN::Delta;
-use File::Path;
+setlocale(LC_ALL, "C");
my $repospath = tempdir('svn-perl-test-XXXXXX', TMPDIR => 1, CLEANUP => 1);
@@ -107,6 +112,26 @@ ok($main::something_destroyed, 'callback
# TEST
cmp_ok($fs->youngest_rev, '==', 3);
+open my $dump_fh, ">", File::Spec->devnull or die "open file sink: $!";
+
+my $feedback;
+open my $feedback_fh, ">", \$feedback or die "open string: $!";
+
+my $cancel_cb_called = 0;
+$repos->dump_fs2($dump_fh, $feedback_fh,
+ 0, $SVN::Core::INVALID_REVNUM, # start_rev, end_rev
+ 0, 0, # incremental, deltify
+ sub { $cancel_cb_called++; 0 });
+# TEST
+ok($cancel_cb_called, 'cancel callback was called');
+# TEST
+is($feedback, <<'...', 'dump feedback');
+* Dumped revision 0.
+* Dumped revision 1.
+* Dumped revision 2.
+* Dumped revision 3.
+...
+
END {
diag "cleanup";
rmtree($repospath);
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/3client.t
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/3client.t?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/3client.t (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/3client.t Fri Jan 16 14:01:35 2015
@@ -20,7 +20,7 @@
#
#
-use Test::More tests => 297;
+use Test::More tests => 302;
use strict;
# shut up about variables that are only used once.
@@ -1119,6 +1119,45 @@ isa_ok($ph2,'HASH','propget returns HASH
is(scalar(keys %$ph2),0,
'No properties after deleting a property');
+# test cancel callback
+my $cancel_cb_called = 0;
+$ctx->cancel(sub { $cancel_cb_called++; 0 });
+my $log_entries_received = 0;
+$ctx->log5($reposurl,
+ 'HEAD',['HEAD',1],0, # peg rev, rev ranges, limit
+ 1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+ undef, # revprops
+ sub { $log_entries_received++ });
+# TEST
+ok($cancel_cb_called, 'cancel callback was called');
+# TEST
+is($log_entries_received, $current_rev, 'log entries received');
+
+my $cancel_msg = "stop the presses";
+$ctx->cancel(sub { $cancel_msg });
+$svn_error = $ctx->log5($reposurl,
+ 'HEAD',['HEAD',1],0, # peg rev, rev ranges, limit
+ 1,1,0, # discover_changed_paths, strict_node_history, include_merged_revisions
+ undef, # revprops
+ sub { });
+# TEST
+isa_ok($svn_error, '_p_svn_error_t', 'return of a cancelled operation');
+# TEST
+is($svn_error->apr_err, $SVN::Error::CANCELLED, "SVN_ERR_CANCELLED");
+{
+ # If we're running a debug build, $svn_error may be the top of a
+ # chain of svn_error_t's (all with message "traced call"), we need
+ # to get to the bottom svn_error_t to check for the original message.
+ my $chained = $svn_error;
+ $chained = $chained->child while $chained->child;
+ # TEST
+ is($chained->message, $cancel_msg, 'cancellation message');
+}
+
+$svn_error->clear(); # don't leak this
+$ctx->cancel(undef); # reset cancel callback
+
+
SKIP: {
# This is ugly. It is included here as an aide to understand how
# to test this and because it makes my life easier as I only have
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/6ra.t
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/6ra.t?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/6ra.t (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/perl/native/t/6ra.t Fri Jan 16 14:01:35 2015
@@ -202,12 +202,6 @@ is($ed->{trunk}{props}{'dir-prop'}, 'fro
is($ed->{'trunk/filea'}{props}{'binary-prop'}, $BINARY_DATA,
'replay: binary-prop');
-END {
-diag "cleanup";
-rmtree($repospath);
-}
-
-
package MockEditor;
sub new { bless {}, shift }
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c Fri Jan 16 14:01:35 2015
@@ -1540,6 +1540,7 @@ static svn_error_t *type_conversion_erro
typedef struct item_baton {
PyObject *editor; /* the editor handling the callbacks */
PyObject *baton; /* the dir/file baton (or NULL for edit baton) */
+ apr_pool_t *pool; /* top-level pool */
} item_baton;
static item_baton *make_baton(apr_pool_t *pool,
@@ -1548,13 +1549,11 @@ static item_baton *make_baton(apr_pool_t
{
item_baton *newb = apr_palloc(pool, sizeof(*newb));
- /* Note: We steal the caller's reference to 'baton'. Also, to avoid
- memory leaks, we borrow the caller's reference to 'editor'. In this
- case, borrowing the reference to 'editor' is safe because the contents
- of an item_baton struct are only used by function calls which operate on
- the editor itself. */
+ /* Note: We steal the caller's reference to 'baton'. */
+ Py_INCREF(editor);
newb->editor = editor;
newb->baton = baton;
+ newb->pool = pool;
return newb;
}
@@ -1583,6 +1582,9 @@ static svn_error_t *close_baton(void *ba
/* there is no return value, so just toss this object (probably Py_None) */
Py_DECREF(result);
+ /* Release the editor object */
+ Py_DECREF(ib->editor);
+
/* We're now done with the baton. Since there isn't really a free, all
we need to do is note that its objects are no longer referenced by
the baton. */
@@ -2044,6 +2046,373 @@ void svn_swig_py_make_editor(const svn_d
*edit_baton = make_baton(pool, py_editor, NULL);
}
+
+/* Wrappers for dump stream parser */
+
+static svn_error_t *parse_fn3_magic_header_record(int version,
+ void *parse_baton,
+ apr_pool_t *pool)
+{
+ item_baton *ib = parse_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"magic_header_record",
+ (char *)"lO&", version,
+ make_ob_pool, pool)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* there is no return value, so just toss this object (probably Py_None) */
+ Py_DECREF(result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_uuid_record(const char *uuid,
+ void *parse_baton,
+ apr_pool_t *pool)
+{
+ item_baton *ib = parse_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"uuid_record",
+ (char *)"sO&", uuid,
+ make_ob_pool, pool)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* there is no return value, so just toss this object (probably Py_None) */
+ Py_DECREF(result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_new_revision_record(void **revision_baton,
+ apr_hash_t *headers,
+ void *parse_baton,
+ apr_pool_t *pool)
+{
+ item_baton *ib = parse_baton;
+ PyObject *result;
+ PyObject *tmp;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"new_revision_record",
+ (char *)"O&O&",
+ svn_swig_py_stringhash_to_dict, headers,
+ make_ob_pool, pool)) == NULL) {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* make_baton takes our 'result' reference */
+ *revision_baton = make_baton(pool, ib->editor, result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_new_node_record(void **node_baton,
+ apr_hash_t *headers,
+ void *revision_baton,
+ apr_pool_t *pool)
+{
+ item_baton *ib = revision_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"new_node_record",
+ (char *)"O&OO&",
+ svn_swig_py_stringhash_to_dict, headers,
+ ib->baton,
+ make_ob_pool, pool)) == NULL) {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* make_baton takes our 'result' reference */
+ *node_baton = make_baton(pool, ib->editor, result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_set_revision_property(void *revision_baton,
+ const char *name,
+ const svn_string_t *value)
+{
+ item_baton *ib = revision_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"set_revision_property",
+ (char *)"Oss#", ib->baton, name,
+ value ? value->data : NULL,
+ value ? value->len : 0)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* there is no return value, so just toss this object (probably Py_None) */
+ Py_DECREF(result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_set_node_property(void *node_baton,
+ const char *name,
+ const svn_string_t *value)
+{
+ item_baton *ib = node_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"set_node_property",
+ (char *)"Oss#", ib->baton, name,
+ value ? value->data : NULL,
+ value ? value->len : 0)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* there is no return value, so just toss this object (probably Py_None) */
+ Py_DECREF(result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_delete_node_property(void *node_baton,
+ const char *name)
+{
+ item_baton *ib = node_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"delete_node_property",
+ (char *)"Os", ib->baton, name)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* there is no return value, so just toss this object (probably Py_None) */
+ Py_DECREF(result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_remove_node_props(void *node_baton)
+{
+ item_baton *ib = node_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"remove_node_props",
+ (char *)"(O)", ib->baton)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* there is no return value, so just toss this object (probably Py_None) */
+ Py_DECREF(result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_set_fulltext(svn_stream_t **stream,
+ void *node_baton)
+{
+ item_baton *ib = node_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"set_fulltext",
+ (char *)"(O)", ib->baton)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* Interpret None to mean NULL - no text is desired */
+ if (result == Py_None)
+ {
+ *stream = NULL;
+ }
+ else
+ {
+ /* create a stream from the IO object. it will increment the
+ reference on the 'result'. */
+ *stream = svn_swig_py_make_stream(result, ib->pool);
+ }
+
+ /* if the handler returned an IO object, svn_swig_py_make_stream() has
+ incremented its reference counter. If it was None, it is discarded. */
+ Py_DECREF(result);
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_apply_textdelta(svn_txdelta_window_handler_t *handler,
+ void **handler_baton,
+ void *node_baton)
+{
+ item_baton *ib = node_baton;
+ PyObject *result;
+ svn_error_t *err;
+
+ svn_swig_py_acquire_py_lock();
+
+ /* ### python doesn't have 'const' on the method name and format */
+ if ((result = PyObject_CallMethod(ib->editor, (char *)"apply_textdelta",
+ (char *)"(O)", ib->baton)) == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ /* Interpret None to mean svn_delta_noop_window_handler. This is much
+ easier/faster than making code always have to write a NOOP handler
+ in Python. */
+ if (result == Py_None)
+ {
+ Py_DECREF(result);
+
+ *handler = svn_delta_noop_window_handler;
+ *handler_baton = NULL;
+ }
+ else
+ {
+ /* return the thunk for invoking the handler. the baton takes our
+ 'result' reference, which is the handler. */
+ *handler = window_handler;
+ *handler_baton = result;
+ }
+
+ err = SVN_NO_ERROR;
+
+ finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
+
+
+static svn_error_t *parse_fn3_close_node(void *node_baton)
+{
+ return close_baton(node_baton, "close_node");
+}
+
+
+static svn_error_t *parse_fn3_close_revision(void *revision_baton)
+{
+ return close_baton(revision_baton, "close_revision");
+}
+
+
+static const svn_repos_parse_fns3_t thunk_parse_fns3_vtable =
+ {
+ parse_fn3_magic_header_record,
+ parse_fn3_uuid_record,
+ parse_fn3_new_revision_record,
+ parse_fn3_new_node_record,
+ parse_fn3_set_revision_property,
+ parse_fn3_set_node_property,
+ parse_fn3_delete_node_property,
+ parse_fn3_remove_node_props,
+ parse_fn3_set_fulltext,
+ parse_fn3_apply_textdelta,
+ parse_fn3_close_node,
+ parse_fn3_close_revision
+ };
+
+static apr_status_t
+svn_swig_py_parse_fns3_destroy(void *parse_baton)
+{
+ close_baton(parse_baton, "_close_dumpstream");
+ return APR_SUCCESS;
+}
+
+void svn_swig_py_make_parse_fns3(const svn_repos_parse_fns3_t **parse_fns3,
+ void **parse_baton,
+ PyObject *py_parse_fns3,
+ apr_pool_t *pool)
+{
+ *parse_fns3 = &thunk_parse_fns3_vtable;
+ *parse_baton = make_baton(pool, py_parse_fns3, NULL);
+
+ /* Dump stream vtable does not provide a method which is called right before
+ the end of the parsing (similar to close_edit/abort_edit in delta editor).
+ Thus, register a pool clean-up routine to release this parse baton. */
+ apr_pool_cleanup_register(pool, *parse_baton, svn_swig_py_parse_fns3_destroy,
+ apr_pool_cleanup_null);
+}
/*** Other Wrappers for SVN Functions ***/
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h Fri Jan 16 14:01:35 2015
@@ -252,6 +252,12 @@ void svn_swig_py_make_editor(const svn_d
PyObject *py_editor,
apr_pool_t *pool);
+/* make a parse vtable that "thunks" from C callbacks up to Python */
+void svn_swig_py_make_parse_fns3(const svn_repos_parse_fns3_t **parse_fns3,
+ void **parse_baton,
+ PyObject *py_parse_fns3,
+ apr_pool_t *pool);
+
apr_file_t *svn_swig_py_make_file(PyObject *py_file,
apr_pool_t *pool);
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/core.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/core.py?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/core.py (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/core.py Fri Jan 16 14:01:35 2015
@@ -191,8 +191,9 @@ class Stream:
svn_stream_write(self._stream, buf)
def close(self):
- svn_stream_close(self._stream)
- self._stream = None
+ if self._stream is not None:
+ svn_stream_close(self._stream)
+ self._stream = None
def secs_from_timestr(svn_datetime, pool=None):
"""Convert a Subversion datetime string into seconds since the Epoch."""
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/repos.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/repos.py?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/repos.py (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/python/svn/repos.py Fri Jan 16 14:01:35 2015
@@ -285,3 +285,56 @@ class RevisionChangeCollector(ChangeColl
if idx == -1:
return parent_path + '/' + path
return parent_path + path[idx:]
+
+
+class ParseFns3:
+ def __init__(self):
+ pass
+
+ def __del__(self):
+ pass
+
+ def _close_dumpstream(self):
+ # Does not correspond to a C method - called before finishing the
+ # parsing of the dump stream.
+ pass
+
+ def magic_header_record(self, version, pool=None):
+ pass
+
+ def uuid_record(self, uuid, pool=None):
+ pass
+
+ def new_revision_record(self, headers, pool=None):
+ return None # Returns revision_baton
+
+ def new_node_record(self, headers, revision_baton, pool=None):
+ return None # Returns node_baton
+
+ def set_revision_property(self, revision_baton, name, value):
+ pass
+
+ def set_node_property(self, node_baton, name, value):
+ pass
+
+ def delete_node_property(self, node_baton, name):
+ pass
+
+ def remove_node_props(self, node_baton):
+ pass
+
+ def set_fulltext(self, node_baton):
+ return None # Returns a writable stream
+
+ def apply_textdelta(self, node_baton):
+ return None # Returns delta window handler
+
+ def close_node(self, node_baton):
+ pass
+
+ def close_revision(self, revision_baton):
+ pass
+
+
+def make_parse_fns3(parse_fns3, pool=None):
+ return svn_swig_py_make_parse_fns3(parse_fns3, pool)
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/python/tests/repository.py
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/python/tests/repository.py?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/python/tests/repository.py (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/python/tests/repository.py Fri Jan 16 14:01:35 2015
@@ -18,7 +18,7 @@
# under the License.
#
#
-import unittest, setup_path
+import unittest, setup_path, os, sys
from sys import version_info # For Python version check
if version_info[0] >= 3:
# Python >=3.0
@@ -44,6 +44,42 @@ class ChangeReceiver(delta.Editor):
self.textdeltas.append(textdelta)
return textdelta_handler
+class DumpStreamParser(repos.ParseFns3):
+ def __init__(self):
+ repos.ParseFns3.__init__(self)
+ self.ops = []
+ def magic_header_record(self, version, pool=None):
+ self.ops.append(("magic-header", version))
+ def uuid_record(self, uuid, pool=None):
+ self.ops.append(("uuid", uuid))
+ def new_revision_record(self, headers, pool=None):
+ rev = int(headers[repos.DUMPFILE_REVISION_NUMBER])
+ self.ops.append(("new-revision", rev))
+ return rev
+ def close_revision(self, revision_baton):
+ self.ops.append(("close-revision", revision_baton))
+ def new_node_record(self, headers, revision_baton, pool=None):
+ node = headers[repos.DUMPFILE_NODE_PATH]
+ self.ops.append(("new-node", revision_baton, node))
+ return (revision_baton, node)
+ def close_node(self, node_baton):
+ self.ops.append(("close-node", node_baton[0], node_baton[1]))
+ def set_revision_property(self, revision_baton, name, value):
+ self.ops.append(("set-revision-prop", revision_baton, name, value))
+ def set_node_property(self, node_baton, name, value):
+ self.ops.append(("set-node-prop", node_baton[0], node_baton[1], name, value))
+ def remove_node_props(self, node_baton):
+ self.ops.append(("remove-node-props", node_baton[0], node_baton[1]))
+ def delete_node_property(self, node_baton, name):
+ self.ops.append(("delete-node-prop", node_baton[0], node_baton[1], name))
+ def apply_textdelta(self, node_baton):
+ self.ops.append(("apply-textdelta", node_baton[0], node_baton[1]))
+ return None
+ def set_fulltext(self, node_baton):
+ self.ops.append(("set-fulltext", node_baton[0], node_baton[1]))
+ return None
+
+
def _authz_callback(root, path, pool):
"A dummy authz callback which always returns success."
return 1
@@ -139,6 +175,62 @@ class SubversionRepositoryTestCase(unitt
# svn_repos_t objects, so the following call segfaults
#repos.dump_fs2(None, None, None, 0, self.rev, 0, 0, None)
+ def test_parse_fns3(self):
+ self.cancel_calls = 0
+ def is_cancelled():
+ self.cancel_calls += 1
+ return None
+ dump_path = os.path.join(os.path.dirname(sys.argv[0]),
+ "trac/versioncontrol/tests/svnrepos.dump")
+ stream = open(dump_path)
+ dsp = DumpStreamParser()
+ ptr, baton = repos.make_parse_fns3(dsp)
+ repos.parse_dumpstream3(stream, ptr, baton, False, is_cancelled)
+ stream.close()
+ self.assertEqual(self.cancel_calls, 76)
+ expected_list = [
+ ("magic-header", 2),
+ ('uuid', '92ea810a-adf3-0310-b540-bef912dcf5ba'),
+ ('new-revision', 0),
+ ('set-revision-prop', 0, 'svn:date', '2005-04-01T09:57:41.312767Z'),
+ ('close-revision', 0),
+ ('new-revision', 1),
+ ('set-revision-prop', 1, 'svn:log', 'Initial directory layout.'),
+ ('set-revision-prop', 1, 'svn:author', 'john'),
+ ('set-revision-prop', 1, 'svn:date', '2005-04-01T10:00:52.353248Z'),
+ ('new-node', 1, 'branches'),
+ ('remove-node-props', 1, 'branches'),
+ ('close-node', 1, 'branches'),
+ ('new-node', 1, 'tags'),
+ ('remove-node-props', 1, 'tags'),
+ ('close-node', 1, 'tags'),
+ ('new-node', 1, 'trunk'),
+ ('remove-node-props', 1, 'trunk'),
+ ('close-node', 1, 'trunk'),
+ ('close-revision', 1),
+ ('new-revision', 2),
+ ('set-revision-prop', 2, 'svn:log', 'Added README.'),
+ ('set-revision-prop', 2, 'svn:author', 'john'),
+ ('set-revision-prop', 2, 'svn:date', '2005-04-01T13:12:18.216267Z'),
+ ('new-node', 2, 'trunk/README.txt'),
+ ('remove-node-props', 2, 'trunk/README.txt'),
+ ('set-fulltext', 2, 'trunk/README.txt'),
+ ('close-node', 2, 'trunk/README.txt'),
+ ('close-revision', 2), ('new-revision', 3),
+ ('set-revision-prop', 3, 'svn:log', 'Fixed README.\n'),
+ ('set-revision-prop', 3, 'svn:author', 'kate'),
+ ('set-revision-prop', 3, 'svn:date', '2005-04-01T13:24:58.234643Z'),
+ ('new-node', 3, 'trunk/README.txt'),
+ ('remove-node-props', 3, 'trunk/README.txt'),
+ ('set-node-prop', 3, 'trunk/README.txt', 'svn:mime-type', 'text/plain'),
+ ('set-node-prop', 3, 'trunk/README.txt', 'svn:eol-style', 'native'),
+ ('set-fulltext', 3, 'trunk/README.txt'),
+ ('close-node', 3, 'trunk/README.txt'), ('close-revision', 3),
+ ]
+ # Compare only the first X nodes described in the expected list - otherwise
+ # the comparison list gets too long.
+ self.assertEqual(dsp.ops[:len(expected_list)], expected_list)
+
def test_get_logs(self):
"""Test scope of get_logs callbacks"""
logs = []
@@ -177,6 +269,17 @@ class SubversionRepositoryTestCase(unitt
set(["This is a test.\n", "A test.\n"]))
self.assertEqual(len(editor.textdeltas), 2)
+ def test_unnamed_editor(self):
+ """Test editor object without reference from interpreter"""
+ # Check that the delta.Editor object has proper lifetime. Without
+ # increment of the refcount in make_baton, the object was destroyed
+ # immediately because the interpreter does not hold a reference to it.
+ this_root = fs.revision_root(self.fs, self.rev)
+ prev_root = fs.revision_root(self.fs, self.rev-1)
+ e_ptr, e_baton = delta.make_editor(ChangeReceiver(this_root, prev_root))
+ repos.dir_delta(prev_root, '', '', this_root, '', e_ptr, e_baton,
+ _authz_callback, 1, 1, 0, 0)
+
def test_retrieve_and_change_rev_prop(self):
"""Test playing with revprops"""
self.assertEqual(repos.fs_revision_prop(self.repos, self.rev, "svn:log",
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_client.i
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_client.i?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_client.i (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_client.i Fri Jan 16 14:01:35 2015
@@ -170,13 +170,6 @@
svn_swig_rb_get_commit_log_func)
#endif
-#ifdef SWIGRUBY
-%callback_typemap(svn_cancel_func_t cancel_func, void *cancel_baton,
- ,
- ,
- svn_swig_rb_cancel_func)
-#endif
-
%callback_typemap(svn_client_blame_receiver_t receiver, void *receiver_baton,
svn_swig_py_client_blame_receiver_func,
svn_swig_pl_blame_func,
Modified: subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_repos.i
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_repos.i?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_repos.i (original)
+++ subversion/branches/svn-auth-x509/subversion/bindings/swig/svn_repos.i Fri Jan 16 14:01:35 2015
@@ -147,8 +147,18 @@ svn_error_t *svn_repos_dump_fs2(svn_repo
%ignore svn_repos_dump_fs2;
#endif
+/* ----------------------------------------------------------------------- */
+#ifdef SWIGPYTHON
+/* Make swig wrap this function for us, to allow making a vtable in python */
+void svn_swig_py_make_parse_fns3(const svn_repos_parse_fns3_t **parse_fns3,
+ void **parse_baton,
+ PyObject *py_parse_fns3,
+ apr_pool_t *pool);
+#endif
+
%include svn_repos_h.swg
#ifdef SWIGRUBY
%define_close_related_methods(repos)
#endif
+
Modified: subversion/branches/svn-auth-x509/subversion/include/mod_dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/mod_dav_svn.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/mod_dav_svn.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/mod_dav_svn.h Fri Jan 16 14:01:35 2015
@@ -40,7 +40,7 @@ extern "C" {
/**
Given an apache request @a r, a @a uri, and a @a root_path to the svn
location block, process @a uri and return many things, allocated in
- @a r->pool:
+ @a pool:
- @a cleaned_uri: The uri with duplicate and trailing slashes removed.
@@ -74,7 +74,25 @@ extern "C" {
- @a relative_path: /!svn/blah/13/A/B/alpha
- @a repos_path: A/B/alpha
- @a trailing_slash: FALSE
+
+ NOTE: The returned dav_error will be also allocated in @a pool, not
+ in @a r->pool.
+
+ @since New in 1.9
*/
+AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri2(request_rec *r,
+ const char *uri_to_split,
+ const char *root_path,
+ const char **cleaned_uri,
+ int *trailing_slash,
+ const char **repos_basename,
+ const char **relative_path,
+ const char **repos_path,
+ apr_pool_t *pool);
+
+/**
+ * Same as dav_svn_split_uri2() but allocates the result in @a r->pool.
+ */
AP_MODULE_DECLARE(dav_error *) dav_svn_split_uri(request_rec *r,
const char *uri,
const char *root_path,
@@ -87,7 +105,22 @@ AP_MODULE_DECLARE(dav_error *) dav_svn_s
/**
* Given an apache request @a r and a @a root_path to the svn location
- * block, set @a *repos_path to the path of the repository on disk. */
+ * block, set @a *repos_path to the path of the repository on disk.
+ * Perform all allocations in @a pool.
+ *
+ * NOTE: The returned dav_error will be also allocated in @a pool, not
+ * in @a r->pool.
+ *
+ * @since New in 1.9
+ */
+AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path2(request_rec *r,
+ const char *root_path,
+ const char **repos_path,
+ apr_pool_t *pool);
+
+/**
+ * Same as dav_svn_get_repos_path2() but allocates the result in@a r->pool.
+ */
AP_MODULE_DECLARE(dav_error *) dav_svn_get_repos_path(request_rec *r,
const char *root_path,
const char **repos_path);
Modified: subversion/branches/svn-auth-x509/subversion/include/private/svn_fs_util.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/private/svn_fs_util.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/private/svn_fs_util.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/private/svn_fs_util.h Fri Jan 16 14:01:35 2015
@@ -29,12 +29,17 @@
#include "svn_types.h"
#include "svn_error.h"
+#include "svn_version.h"
#include "svn_fs.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
+/* Get libsvn_fs_util version information. */
+const svn_version_t *
+svn_fs_util__version(void);
+
/* Returns whether PATH is in canonical form as defined by
svn_fs__canonicalize_abspath().
*/
Modified: subversion/branches/svn-auth-x509/subversion/include/private/svn_mergeinfo_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/private/svn_mergeinfo_private.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/private/svn_mergeinfo_private.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/private/svn_mergeinfo_private.h Fri Jan 16 14:01:35 2015
@@ -65,6 +65,27 @@ 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. */
Modified: subversion/branches/svn-auth-x509/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/private/svn_wc_private.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/private/svn_wc_private.h Fri Jan 16 14:01:35 2015
@@ -621,7 +621,6 @@ svn_wc__node_get_base(svn_node_kind_t *k
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);
Modified: subversion/branches/svn-auth-x509/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/svn_fs.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/svn_fs.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/svn_fs.h Fri Jan 16 14:01:35 2015
@@ -126,6 +126,16 @@ typedef struct svn_fs_t svn_fs_t;
*/
#define SVN_FS_CONFIG_FSFS_SHARD_SIZE "fsfs-shard-size"
+/** Enable / disable the FSFS format 7 logical addressing feature for a
+ * newly created repository.
+ *
+ * This option will only be used during the creation of new repositories
+ * and is otherwise ignored.
+ *
+ * @since New in 1.9.
+ */
+#define SVN_FS_CONFIG_FSFS_LOG_ADDRESSING "fsfs-log-addressing"
+
/* Note to maintainers: if you add further SVN_FS_CONFIG_FSFS_CACHE_* knobs,
update fs_fs.c:verify_as_revision_before_current_plus_plus(). */
Modified: subversion/branches/svn-auth-x509/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/svn_io.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/svn_io.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/svn_io.h Fri Jan 16 14:01:35 2015
@@ -682,28 +682,48 @@ svn_io_files_contents_three_same_p(svn_b
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.
+/** Create a file at utf8-encoded path @a file with the contents given
+ * by the null-terminated string @a contents.
+ *
+ * @a file must not already exist. If an error occurs while writing or
+ * closing the file, attempt to delete the file before returning the error.
+ *
+ * Write the data in 'binary' mode (#APR_FOPEN_BINARY). If @a contents
+ * is null, create an empty file.
+ *
* Use @a pool for memory allocations.
+ *
+ * @since
*/
svn_error_t *
svn_io_file_create(const char *file,
const char *contents,
apr_pool_t *pool);
-/** Create file at utf8-encoded @a file with binary contents @a contents
- * of @a length bytes. @a file must not already exist.
+/** Create a file at utf8-encoded path @a file with the contents given
+ * by @a contents of @a length bytes.
+ *
+ * @a file must not already exist. If an error occurs while writing or
+ * closing the file, attempt to delete the file before returning the error.
+ *
+ * Write the data in 'binary' mode (#APR_FOPEN_BINARY). If @a length is
+ * zero, create an empty file; in this case @a contents may be null.
+ *
* Use @a pool for memory allocations.
*
* @since New in 1.9.
*/
svn_error_t *
-svn_io_file_create_binary(const char *file,
- const char *contents,
- apr_size_t length,
- apr_pool_t *pool);
+svn_io_file_create_bytes(const char *file,
+ const void *contents,
+ apr_size_t length,
+ apr_pool_t *pool);
-/** Create empty file at utf8-encoded @a file, which must not already exist.
+/** Create an empty file at utf8-encoded path @a file.
+ *
+ * @a file must not already exist. If an error occurs while
+ * closing the file, attempt to delete the file before returning the error.
+ *
* Use @a pool for memory allocations.
*
* @since New in 1.9.
Modified: subversion/branches/svn-auth-x509/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/svn-auth-x509/subversion/include/svn_repos.h?rev=1652409&r1=1652408&r2=1652409&view=diff
==============================================================================
--- subversion/branches/svn-auth-x509/subversion/include/svn_repos.h (original)
+++ subversion/branches/svn-auth-x509/subversion/include/svn_repos.h Fri Jan 16 14:01:35 2015
@@ -287,7 +287,14 @@ typedef enum svn_repos_notify_warning_t
*
* @since New in 1.9.
*/
- svn_repos_notify_warning_mergeinfo_collision
+ svn_repos_notify_warning_mergeinfo_collision,
+
+ /**
+ * Detected invalid mergeinfo.
+ *
+ * @since New in 1.9.
+ */
+ svn_repos_notify_warning_invalid_mergeinfo
} svn_repos_notify_warning_t;
/**
@@ -3086,7 +3093,7 @@ svn_repos_load_fs5(svn_repos_t *repos,
/** Similar to svn_repos_load_fs5(), but with @a ignore_dates
* always passed as FALSE.
*
- * @since New in 1.9.
+ * @since New in 1.8.
* @deprecated Provided for backward compatibility with the 1.8 API.
*/
SVN_DEPRECATED
@@ -3333,20 +3340,65 @@ svn_repos_parse_dumpstream3(svn_stream_t
* @a end_rev). They refer to dump stream revision numbers rather than
* committed revision numbers.
*
- * 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.
+ * If @a use_history is true, then when the parser encounters a node that
+ * is added-with-history, it will require 'copy-from' history to exist in
+ * the repository at the relative (adjusted) copy-from revision and path.
+ * It will perform a copy from that source location, and will fail if no
+ * suitable source exists there. If @a use_history is false, then it will
+ * instead convert every copy to a plain add.
+ *
+ * ### The 'use_history=FALSE' case is unused and untested in Subversion.
+ * It seems to me it would not work with a deltas dumpfile (a driver
+ * that calls the @c apply_textdelta method), as it would not have
+ * access to the delta base text.
+ *
+ * If @a use_pre_commit_hook is set, call the repository's pre-commit
+ * hook before committing each loaded revision.
+ *
+ * If @a use_post_commit_hook is set, call the repository's
+ * post-commit hook after committing each loaded revision.
*
* If @a validate_props is set, then validate Subversion revision and
* node properties (those in the svn: namespace) against established
* rules for those things.
*
+ * If @a ignore_dates is set, ignore any revision datestamps found in
+ * @a dumpstream, allowing the revisions created by the load process
+ * to be stamped as if they were newly created via the normal commit
+ * process.
+ *
* 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.
*
+ * @since New in 1.9.
+ */
+svn_error_t *
+svn_repos_get_fs_build_parser5(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,
+ const char *parent_dir,
+ svn_boolean_t use_pre_commit_hook,
+ svn_boolean_t use_post_commit_hook,
+ svn_boolean_t ignore_dates,
+ svn_repos_notify_func_t notify_func,
+ void *notify_baton,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_get_fs_build_parser5(), but with the
+ * @c use_pre_commit_hook, @c use_post_commit_hook and @c ignore_dates
+ * arguments all false.
+ *
* @since New in 1.8.
+ * @deprecated Provided for backward compatibility with the 1.8 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_get_fs_build_parser4(const svn_repos_parse_fns3_t **parser,
void **parse_baton,