You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2010/09/28 19:35:26 UTC
svn commit: r1002283 [1/10] - in /subversion/branches/javahl-ra: ./ build/
notes/ notes/http-and-webdav/ notes/wc-ng/ subversion/bindings/javahl/native/
subversion/bindings/javahl/src/org/apache/subversion/javahl/
subversion/bindings/javahl/src/org/tig...
Author: hwright
Date: Tue Sep 28 17:35:22 2010
New Revision: 1002283
URL: http://svn.apache.org/viewvc?rev=1002283&view=rev
Log:
On the javahl-ra branch:
Bring up-to-date with trunk.
Added:
subversion/branches/javahl-ra/notes/wc-ng/nodes
- copied unchanged from r1002279, subversion/trunk/notes/wc-ng/nodes
subversion/branches/javahl-ra/subversion/libsvn_ra/debug_reporter.c
- copied unchanged from r1002279, subversion/trunk/subversion/libsvn_ra/debug_reporter.c
subversion/branches/javahl-ra/subversion/libsvn_ra/debug_reporter.h
- copied unchanged from r1002279, subversion/trunk/subversion/libsvn_ra/debug_reporter.h
subversion/branches/javahl-ra/subversion/tests/cmdline/atomic-ra-revprop-change.c
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/atomic-ra-revprop-change.c
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/copy-bad-line-endings.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/copy-bad-line-endings.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/copy-bad-line-endings.expected.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/copy-bad-line-endings.expected.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/copy-from-previous-version-and-modify.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/copy-from-previous-version-and-modify.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/copy-parent-modify-prop.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/copy-parent-modify-prop.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/descend-into-replace.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/descend-into-replace.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/descend-into-replace.expected.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/descend-into-replace.expected.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/dir-prop-change.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/dir-prop-change.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/modified-in-place.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/modified-in-place.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/move-and-modify.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/move-and-modify.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/no-author.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/no-author.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/repo-with-copy-of-root-dir.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/repo-with-copy-of-root-dir.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/revprops.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/revprops.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/tag-empty-trunk.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/tag-empty-trunk.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/tag-trunk-with-file.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/tag-trunk-with-file.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/tag-trunk-with-file2.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/tag-trunk-with-file2.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.expected.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/trunk-A-changes.expected.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.expected.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/trunk-only.expected.dump
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests_data/url-encoding-bug.dump
- copied unchanged from r1002279, subversion/trunk/subversion/tests/cmdline/svnrdump_tests_data/url-encoding-bug.dump
Modified:
subversion/branches/javahl-ra/ (props changed)
subversion/branches/javahl-ra/CHANGES
subversion/branches/javahl-ra/build.conf
subversion/branches/javahl-ra/build/transform_libtool_scripts.sh
subversion/branches/javahl-ra/configure.ac
subversion/branches/javahl-ra/notes/http-and-webdav/webdav-protocol
subversion/branches/javahl-ra/notes/subversion-design.html
subversion/branches/javahl-ra/subversion/bindings/javahl/native/BlameCallback.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/ClientContext.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.h
subversion/branches/javahl-ra/subversion/bindings/javahl/native/LogMessageCallback.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/ProplistCallback.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/ReposNotifyCallback.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h
subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
subversion/branches/javahl-ra/subversion/include/mod_dav_svn.h
subversion/branches/javahl-ra/subversion/include/private/svn_dav_protocol.h
subversion/branches/javahl-ra/subversion/include/private/svn_sqlite.h
subversion/branches/javahl-ra/subversion/include/svn_client.h
subversion/branches/javahl-ra/subversion/include/svn_dav.h
subversion/branches/javahl-ra/subversion/include/svn_error.h
subversion/branches/javahl-ra/subversion/include/svn_error_codes.h
subversion/branches/javahl-ra/subversion/include/svn_fs.h
subversion/branches/javahl-ra/subversion/include/svn_io.h
subversion/branches/javahl-ra/subversion/include/svn_ra.h
subversion/branches/javahl-ra/subversion/include/svn_ra_svn.h
subversion/branches/javahl-ra/subversion/include/svn_repos.h
subversion/branches/javahl-ra/subversion/include/svn_wc.h
subversion/branches/javahl-ra/subversion/libsvn_auth_kwallet/kwallet.cpp
subversion/branches/javahl-ra/subversion/libsvn_client/checkout.c
subversion/branches/javahl-ra/subversion/libsvn_client/cleanup.c
subversion/branches/javahl-ra/subversion/libsvn_client/client.h
subversion/branches/javahl-ra/subversion/libsvn_client/copy.c
subversion/branches/javahl-ra/subversion/libsvn_client/deprecated.c
subversion/branches/javahl-ra/subversion/libsvn_client/externals.c
subversion/branches/javahl-ra/subversion/libsvn_client/list.c
subversion/branches/javahl-ra/subversion/libsvn_client/patch.c
subversion/branches/javahl-ra/subversion/libsvn_client/prop_commands.c
subversion/branches/javahl-ra/subversion/libsvn_client/relocate.c
subversion/branches/javahl-ra/subversion/libsvn_client/switch.c
subversion/branches/javahl-ra/subversion/libsvn_client/update.c
subversion/branches/javahl-ra/subversion/libsvn_diff/parse-diff.c
subversion/branches/javahl-ra/subversion/libsvn_fs/access.c
subversion/branches/javahl-ra/subversion/libsvn_fs_base/revs-txns.c
subversion/branches/javahl-ra/subversion/libsvn_fs_fs/fs_fs.c
subversion/branches/javahl-ra/subversion/libsvn_ra/deprecated.c
subversion/branches/javahl-ra/subversion/libsvn_ra/ra_loader.c
subversion/branches/javahl-ra/subversion/libsvn_ra/ra_loader.h
subversion/branches/javahl-ra/subversion/libsvn_ra/wrapper_template.h
subversion/branches/javahl-ra/subversion/libsvn_ra_local/ra_plugin.c
subversion/branches/javahl-ra/subversion/libsvn_ra_neon/commit.c
subversion/branches/javahl-ra/subversion/libsvn_ra_neon/fetch.c
subversion/branches/javahl-ra/subversion/libsvn_ra_neon/options.c
subversion/branches/javahl-ra/subversion/libsvn_ra_neon/props.c
subversion/branches/javahl-ra/subversion/libsvn_ra_neon/ra_neon.h
subversion/branches/javahl-ra/subversion/libsvn_ra_neon/util.c
subversion/branches/javahl-ra/subversion/libsvn_ra_serf/commit.c
subversion/branches/javahl-ra/subversion/libsvn_ra_serf/options.c
subversion/branches/javahl-ra/subversion/libsvn_ra_serf/ra_serf.h
subversion/branches/javahl-ra/subversion/libsvn_ra_serf/replay.c
subversion/branches/javahl-ra/subversion/libsvn_ra_serf/util.c
subversion/branches/javahl-ra/subversion/libsvn_ra_svn/client.c
subversion/branches/javahl-ra/subversion/libsvn_ra_svn/editorp.c
subversion/branches/javahl-ra/subversion/libsvn_ra_svn/marshal.c
subversion/branches/javahl-ra/subversion/libsvn_ra_svn/protocol
subversion/branches/javahl-ra/subversion/libsvn_ra_svn/ra_svn.h
subversion/branches/javahl-ra/subversion/libsvn_repos/deprecated.c
subversion/branches/javahl-ra/subversion/libsvn_repos/fs-wrap.c
subversion/branches/javahl-ra/subversion/libsvn_subr/error.c
subversion/branches/javahl-ra/subversion/libsvn_subr/mergeinfo.c
subversion/branches/javahl-ra/subversion/libsvn_subr/sqlite.c
subversion/branches/javahl-ra/subversion/libsvn_subr/svn_string.c
subversion/branches/javahl-ra/subversion/libsvn_wc/adm_crawler.c
subversion/branches/javahl-ra/subversion/libsvn_wc/adm_ops.c
subversion/branches/javahl-ra/subversion/libsvn_wc/copy.c
subversion/branches/javahl-ra/subversion/libsvn_wc/deprecated.c
subversion/branches/javahl-ra/subversion/libsvn_wc/entries.c
subversion/branches/javahl-ra/subversion/libsvn_wc/relocate.c
subversion/branches/javahl-ra/subversion/libsvn_wc/update_editor.c
subversion/branches/javahl-ra/subversion/libsvn_wc/upgrade.c
subversion/branches/javahl-ra/subversion/libsvn_wc/wc-metadata.sql
subversion/branches/javahl-ra/subversion/libsvn_wc/wc-queries.sql
subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.c
subversion/branches/javahl-ra/subversion/libsvn_wc/wc_db.h
subversion/branches/javahl-ra/subversion/libsvn_wc/workqueue.c
subversion/branches/javahl-ra/subversion/mod_dav_svn/authz.c
subversion/branches/javahl-ra/subversion/mod_dav_svn/dav_svn.h
subversion/branches/javahl-ra/subversion/mod_dav_svn/deadprops.c
subversion/branches/javahl-ra/subversion/mod_dav_svn/mod_dav_svn.c
subversion/branches/javahl-ra/subversion/mod_dav_svn/repos.c
subversion/branches/javahl-ra/subversion/mod_dav_svn/util.c
subversion/branches/javahl-ra/subversion/mod_dav_svn/version.c
subversion/branches/javahl-ra/subversion/po/fr.po
subversion/branches/javahl-ra/subversion/svn/cl.h
subversion/branches/javahl-ra/subversion/svn/commit-cmd.c
subversion/branches/javahl-ra/subversion/svn/main.c
subversion/branches/javahl-ra/subversion/svn/move-cmd.c
subversion/branches/javahl-ra/subversion/svn/patch-cmd.c
subversion/branches/javahl-ra/subversion/svn/switch-cmd.c
subversion/branches/javahl-ra/subversion/svn/upgrade-cmd.c
subversion/branches/javahl-ra/subversion/svnrdump/dump_editor.c
subversion/branches/javahl-ra/subversion/svnrdump/dump_editor.h
subversion/branches/javahl-ra/subversion/svnrdump/load_editor.c
subversion/branches/javahl-ra/subversion/svnrdump/load_editor.h
subversion/branches/javahl-ra/subversion/svnrdump/svnrdump.c
subversion/branches/javahl-ra/subversion/svnserve/cyrus_auth.c
subversion/branches/javahl-ra/subversion/svnserve/serve.c
subversion/branches/javahl-ra/subversion/svnsync/main.c
subversion/branches/javahl-ra/subversion/tests/cmdline/ (props changed)
subversion/branches/javahl-ra/subversion/tests/cmdline/authz_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/copy_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/input_validation_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/merge_reintegrate_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/patch_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/prop_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/resolve_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/resolved_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/svnrdump_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/svntest/actions.py
subversion/branches/javahl-ra/subversion/tests/cmdline/svntest/main.py
subversion/branches/javahl-ra/subversion/tests/cmdline/svntest/verify.py
subversion/branches/javahl-ra/subversion/tests/cmdline/svntest/wc.py
subversion/branches/javahl-ra/subversion/tests/cmdline/switch_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/update_tests.py
subversion/branches/javahl-ra/subversion/tests/cmdline/upgrade_tests.py
subversion/branches/javahl-ra/subversion/tests/libsvn_client/client-test.c
subversion/branches/javahl-ra/subversion/tests/libsvn_fs/fs-test.c
subversion/branches/javahl-ra/subversion/tests/libsvn_subr/cache-test.c
subversion/branches/javahl-ra/subversion/tests/libsvn_subr/target-test.c
subversion/branches/javahl-ra/subversion/tests/libsvn_wc/db-test.c
subversion/branches/javahl-ra/subversion/tests/libsvn_wc/entries-compat.c
subversion/branches/javahl-ra/tools/client-side/svnmucc/svnmucc-test.py
subversion/branches/javahl-ra/tools/client-side/svnmucc/svnmucc.c
subversion/branches/javahl-ra/tools/dev/wc-format.py
Propchange: subversion/branches/javahl-ra/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Sep 28 17:35:22 2010
@@ -1,4 +1,5 @@
/subversion/branches/1.5.x-r30215:870312
+/subversion/branches/atomic-revprop:965046-1000689
/subversion/branches/bdb-reverse-deltas:872050-872529
/subversion/branches/diff-callbacks3:870059-870761
/subversion/branches/dont-save-plaintext-passwords-by-default:870728-871118
@@ -37,4 +38,4 @@
/subversion/branches/tc_url_rev:874351-874483
/subversion/branches/tree-conflicts:868291-873154
/subversion/branches/tree-conflicts-notify:873926-874008
-/subversion/trunk:991978-997214
+/subversion/trunk:991978-1002279
Modified: subversion/branches/javahl-ra/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/CHANGES?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/CHANGES (original)
+++ subversion/branches/javahl-ra/CHANGES Tue Sep 28 17:35:22 2010
@@ -1,3 +1,29 @@
+Version 1.6.13
+(?? Sep 2010, from /branches/1.6.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.6.13
+
+ User-visible changes:
+ * don't drop properties during foreign-repo merges (issue #3623)
+ * improve auto-props failure error message (r961970)
+ * improve error message for 403 status with ra_neon (r876615)
+ * don't allow 'merge --reintegrate' for 2-url merges (r959004)
+ * improve handling of missing fsfs.conf in with hotcopy (r980811, -1449)
+ * escape unsafe characters in a URL during export (issue #3683)
+ * don't leak stale locks in FSFS (r959760)
+ * better detect broken working copies during update over neon (r979045)
+ * make rev files read-only (r981921)
+ * properly canonicalize a URL (r984928, -31)
+ * fix wc corruption with 'commit --depth=empty" (issue #3700)
+ * permissions fixes when doing reintegrate merges (related to issue #3242)
+ * fix 2-url reverse-merge mergeinfo (issue #3648)
+
+ Developer-visible changes:
+ * make ruby bindings compatible with Ruby 1.9 (r957507)
+ * use the repos verify API in JavaHL (r948916)
+ * teach ra_serf to parse md5 checksums with update editors (r979429)
+ * let ra_serf work with current serf releases (r879757, r880320, r943796)
+
+
Version 1.6.12
(21 Jun 2010, from /branches/1.6.x)
http://svn.apache.org/repos/asf/subversion/tags/1.6.12
Modified: subversion/branches/javahl-ra/build.conf
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/build.conf?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/build.conf (original)
+++ subversion/branches/javahl-ra/build.conf Tue Sep 28 17:35:22 2010
@@ -989,6 +989,15 @@ install = test
libs = libsvn_wc libsvn_subr apriconv apr
testing = skip
+[atomic-ra-revprop-change]
+type = exe
+path = subversion/tests/cmdline
+sources = atomic-ra-revprop-change.c
+install = test
+libs = libsvn_ra libsvn_subr apriconv apr
+testing = skip
+
+
# ----------------------------------------------------------------------------
#
@@ -1090,7 +1099,7 @@ libs = __ALL__
diff-diff3-test
ra-local-test
svndiff-test vdelta-test
- entries-dump
+ entries-dump atomic-ra-revprop-change
diff-test diff3-test diff4-test
client-test
tree-conflict-data-test db-test pristine-store-test entries-compat-test
Modified: subversion/branches/javahl-ra/build/transform_libtool_scripts.sh
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/build/transform_libtool_scripts.sh?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/build/transform_libtool_scripts.sh (original)
+++ subversion/branches/javahl-ra/build/transform_libtool_scripts.sh Tue Sep 28 17:35:22 2010
@@ -57,17 +57,20 @@ svnserve="$delta $fs $ra_svn $repos $sub
svnsync="$auth_gnome_keyring $auth_kwallet $delta $ra $subr"
svnversion="$subr $wc"
entries_dump="$subr $wc"
+atomic_ra_revprop_change="$subr $ra"
# Variable 'executables' containing names of variables corresponding to executables
-executables="svn svnadmin svndumpfilter svnlook svnserve svnsync svnversion entries_dump"
+executables="svn svnadmin svndumpfilter svnlook svnserve svnsync svnversion entries_dump atomic_ra_revprop_change"
for executable in $executables; do
# Set variables containing paths of executables
- if [ "$executable" != entries_dump ]; then
- eval "${executable}_path=subversion/$executable/$executable"
- else
+ eval "${executable}_path=subversion/$executable/$executable"
+ if [ "$executable" = entries_dump ]; then
eval "${executable}_path=subversion/tests/cmdline/entries-dump"
fi
+ if [ "$executable" = atomic_ra_revprop_change ]; then
+ eval "${executable}_path=subversion/tests/cmdline/atomic-ra-revprop-change"
+ fi
# Delete duplicates in dependencies of executables
executable_dependencies="$(echo -n $(for x in $(eval echo "\$$executable"); do echo $x; done | sort -u))"
eval "$executable=\$executable_dependencies"
Modified: subversion/branches/javahl-ra/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/configure.ac?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/configure.ac (original)
+++ subversion/branches/javahl-ra/configure.ac Tue Sep 28 17:35:22 2010
@@ -702,7 +702,7 @@ dnl Build and install rules ------------
INSTALL_STATIC_RULES="install-bin install-docs"
INSTALL_RULES="install-fsmod-lib install-ramod-lib install-lib install-include install-static"
INSTALL_RULES="$INSTALL_RULES $INSTALL_APACHE_RULE"
-BUILD_RULES="fsmod-lib ramod-lib lib bin test $BUILD_APACHE_RULE"
+BUILD_RULES="fsmod-lib ramod-lib lib bin test $BUILD_APACHE_RULE tools"
if test "$svn_lib_berkeley_db" = "yes"; then
BUILD_RULES="$BUILD_RULES bdb-lib bdb-test"
Modified: subversion/branches/javahl-ra/notes/http-and-webdav/webdav-protocol
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/notes/http-and-webdav/webdav-protocol?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/notes/http-and-webdav/webdav-protocol (original)
+++ subversion/branches/javahl-ra/notes/http-and-webdav/webdav-protocol Tue Sep 28 17:35:22 2010
@@ -177,6 +177,42 @@ Response:
...svn-svndiff stream that can be passed to svn_txdelta_parse_svndiff...
+PROPPATCH
+=========
+
+We extend PROPPATCH as follows. To pass OLD_VALUE_P (as in
+svn_ra_change_rev_prop2()), any propchange which is accompanied by a non-NULL
+OLD_VALUE_P goes within the <D:set><D:prop> tag (and never within the
+<D:remove><D:prop> tag --- even if it is a propdel). Consequently, in
+mod_dav_svn it would land in db_store() and not db_remove().
+
+The property tag (in the C: or S: namespace) always contains the propval in its
+cdata (potentially base64-encoded). The extension is as follows:
+
+* The property tag grows a V:absent attribute, to represent that the property
+ is being removed (i.e., a propdel routed to <D:set><D:prop>).
+
+* A <V:old-value> tag may be nested within the property tag. The nested tag
+ supports the same V:absent and V:encoding attributed as the parent (property)
+ tag.
+
+* To preserve SVN_ERR_FS_PROP_BASEVALUE_MISMATCH (which is part of
+ the API promise), the <D:status>HTTP/1.1 500 (status)</D:status>
+ part of the "207 Multi-Status" response is used. We transmit in
+ it a "412 Precondition Failed" response, which ra_neon and ra_serf
+ then special-case to interpret SVN_ERR_FS_PROP_BASEVALUE_MISMATCH.
+
+ Someday we will marshal complete svn_error_t chains over the wire
+ in ra_dav, just like ra_svn does (see svn_ra_svn__handle_failure_status()),
+ or at least will preserve the outer apr_err code in more cases. In the
+ meantime, using 412 allows us to preserve the SVN_ERR_FS_PROP_BASEVALUE_MISMATCH
+ error code, which is required for implementing svn_ra_change_rev_prop2().
+
+Historical note: we route propdels via <D:set>/db_store() because the mod_dav
+API for db_remove() was insufficient. See this thread:
+http://mid.gmane.org/4C531CFB.2010202@collab.net
+
+
Custom REPORTs
==============
Modified: subversion/branches/javahl-ra/notes/subversion-design.html
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/notes/subversion-design.html?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/notes/subversion-design.html (original)
+++ subversion/branches/javahl-ra/notes/subversion-design.html Tue Sep 28 17:35:22 2010
@@ -2255,7 +2255,7 @@ write/Makefile:6
<p>For a detailed description of exactly how Greg Stein
<em class="email">gstein@lyra.org</em> is mapping the WebDAV DeltaV spec to
- Subversion, see his paper: <a href="http://svn.apache.org/repos/asf/subversion/trunk/www/webdav-usage.html">http://svn.apache.org/repos/asf/subversion/trunk/www/webdav-usage.html</a>
+ Subversion, see his paper: <a href="http://svn.apache.org/repos/asf/subversion/trunk/notes/http-and-webdav/webdav-usage.html">http://svn.apache.org/repos/asf/subversion/trunk/notes/http-and-webdav/webdav-usage.html</a>
</p>
<p>For more information on WebDAV and the DeltaV extensions, see
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/BlameCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/BlameCallback.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/BlameCallback.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/BlameCallback.cpp Tue Sep 28 17:35:22 2010
@@ -106,14 +106,14 @@ BlameCallback::singleLine(svn_revnum_t s
}
// convert the parameters to their Java relatives
- jobject jrevProps = CreateJ::PropertyMap(revProps, pool);
+ jobject jrevProps = CreateJ::PropertyMap(revProps);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
jobject jmergedRevProps = NULL;
if (mergedRevProps != NULL)
{
- jmergedRevProps = CreateJ::PropertyMap(mergedRevProps, pool);
+ jmergedRevProps = CreateJ::PropertyMap(mergedRevProps);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
}
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/ClientContext.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/ClientContext.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/ClientContext.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/ClientContext.cpp Tue Sep 28 17:35:22 2010
@@ -285,7 +285,7 @@ ClientContext::notify(void *baton,
env->DeleteLocalRef(clazz);
}
- jobject jInfo = CreateJ::ClientNotifyInformation(notify, pool);
+ jobject jInfo = CreateJ::ClientNotifyInformation(notify);
if (JNIUtil::isJavaExceptionThrown())
return;
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.cpp Tue Sep 28 17:35:22 2010
@@ -737,8 +737,7 @@ CreateJ::Status(svn_wc_context_t *wc_ctx
}
jobject
-CreateJ::ClientNotifyInformation(const svn_wc_notify_t *wcNotify,
- apr_pool_t *pool)
+CreateJ::ClientNotifyInformation(const svn_wc_notify_t *wcNotify)
{
JNIEnv *env = JNIUtil::getEnv();
@@ -828,7 +827,7 @@ CreateJ::ClientNotifyInformation(const s
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
- jobject jrevProps = CreateJ::PropertyMap(wcNotify->rev_props, pool);
+ jobject jrevProps = CreateJ::PropertyMap(wcNotify->rev_props);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN_NULL;
@@ -857,8 +856,7 @@ CreateJ::ClientNotifyInformation(const s
}
jobject
-CreateJ::ReposNotifyInformation(const svn_repos_notify_t *reposNotify,
- apr_pool_t *pool)
+CreateJ::ReposNotifyInformation(const svn_repos_notify_t *reposNotify)
{
JNIEnv *env = JNIUtil::getEnv();
@@ -1098,7 +1096,7 @@ CreateJ::StringSet(apr_array_header_t *s
return CreateJ::Set(jstrs);
}
-jobject CreateJ::PropertyMap(apr_hash_t *prop_hash, apr_pool_t *pool)
+jobject CreateJ::PropertyMap(apr_hash_t *prop_hash)
{
JNIEnv *env = JNIUtil::getEnv();
@@ -1138,7 +1136,8 @@ jobject CreateJ::PropertyMap(apr_hash_t
apr_hash_index_t *hi;
int i = 0;
- for (hi = apr_hash_first(pool, prop_hash); hi; hi = apr_hash_next(hi), ++i)
+ for (hi = apr_hash_first(apr_hash_pool_get(prop_hash), prop_hash);
+ hi; hi = apr_hash_next(hi), ++i)
{
const char *key;
svn_string_t *val;
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.h (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/CreateJ.h Tue Sep 28 17:35:22 2010
@@ -62,10 +62,10 @@ class CreateJ
const svn_client_status_t *status, apr_pool_t *pool);
static jobject
- ClientNotifyInformation(const svn_wc_notify_t *notify, apr_pool_t *pool);
+ ClientNotifyInformation(const svn_wc_notify_t *notify);
static jobject
- ReposNotifyInformation(const svn_repos_notify_t *notify, apr_pool_t *pool);
+ ReposNotifyInformation(const svn_repos_notify_t *notify);
static jobject
CommitItem(svn_client_commit_item3_t *item);
@@ -80,7 +80,7 @@ class CreateJ
StringSet(apr_array_header_t *strings);
static jobject
- PropertyMap(apr_hash_t *prop_hash, apr_pool_t *pool);
+ PropertyMap(apr_hash_t *prop_hash);
/* 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. */
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/LogMessageCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/LogMessageCallback.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/LogMessageCallback.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/LogMessageCallback.cpp Tue Sep 28 17:35:22 2010
@@ -115,7 +115,7 @@ LogMessageCallback::singleMessage(svn_lo
jobject jrevprops = NULL;
if (log_entry->revprops != NULL && apr_hash_count(log_entry->revprops) > 0)
- jrevprops = CreateJ::PropertyMap(log_entry->revprops, pool);
+ jrevprops = CreateJ::PropertyMap(log_entry->revprops);
env->CallVoidMethod(m_callback,
sm_mid,
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/ProplistCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/ProplistCallback.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/ProplistCallback.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/ProplistCallback.cpp Tue Sep 28 17:35:22 2010
@@ -96,7 +96,7 @@ svn_error_t *ProplistCallback::singlePat
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
- jobject jmap = CreateJ::PropertyMap(prop_hash, pool);
+ jobject jmap = CreateJ::PropertyMap(prop_hash);
if (JNIUtil::isJavaExceptionThrown())
POP_AND_RETURN(SVN_NO_ERROR);
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/ReposNotifyCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/ReposNotifyCallback.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/ReposNotifyCallback.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/ReposNotifyCallback.cpp Tue Sep 28 17:35:22 2010
@@ -81,7 +81,7 @@ ReposNotifyCallback::onNotify(const svn_
env->DeleteLocalRef(clazz);
}
- jobject jInfo = CreateJ::ReposNotifyInformation(wcNotify, pool);
+ jobject jInfo = CreateJ::ReposNotifyInformation(wcNotify);
if (JNIUtil::isJavaExceptionThrown())
return;
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.cpp Tue Sep 28 17:35:22 2010
@@ -33,6 +33,7 @@
#include "Pool.h"
#include "Targets.h"
#include "Revision.h"
+#include "OutputStream.h"
#include "RevisionRange.h"
#include "BlameCallback.h"
#include "ProplistCallback.h"
@@ -427,7 +428,7 @@ void SVNClient::move(Targets &srcPaths,
return;
SVN_JNI_ERR(svn_client_move6((apr_array_header_t *) srcs,
- destinationPath.c_str(), force, moveAsChild,
+ destinationPath.c_str(), moveAsChild,
makeParents, revprops.hash(requestPool),
CommitCallback::callback, callback, ctx,
requestPool.pool()), );
@@ -1093,43 +1094,9 @@ SVNClient::diffSummarize(const char *tar
requestPool.pool()), );
}
-jbyteArray SVNClient::fileContent(const char *path, Revision &revision,
- Revision &pegRevision)
-{
- SVN::Pool requestPool;
- SVN_JNI_NULL_PTR_EX(path, "path", NULL);
- Path intPath(path);
- SVN_JNI_ERR(intPath.error_occured(), NULL);
-
- size_t size = 0;
- svn_stream_t *read_stream = createReadStream(requestPool.pool(),
- intPath.c_str(), revision,
- pegRevision, size);
- if (read_stream == NULL)
- return NULL;
-
- JNIEnv *env = JNIUtil::getEnv();
- // size will be set to the number of bytes available.
- jbyteArray jcontent = env->NewByteArray(size);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- jbyte *jbytes = env->GetByteArrayElements(jcontent, NULL);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- svn_error_t *err = svn_stream_read(read_stream, (char *) jbytes, &size);
- env->ReleaseByteArrayElements(jcontent, jbytes, 0);
- SVN_JNI_ERR(err, NULL);
- if (JNIUtil::isJavaExceptionThrown())
- return NULL;
-
- return jcontent;
-}
-
void SVNClient::streamFileContent(const char *path, Revision &revision,
- Revision &pegRevision, jobject outputStream,
- size_t bufSize)
+ Revision &pegRevision,
+ OutputStream &outputStream)
{
SVN::Pool requestPool;
SVN_JNI_NULL_PTR_EX(path, "path", );
@@ -1137,101 +1104,14 @@ void SVNClient::streamFileContent(const
SVN_JNI_ERR(intPath.error_occured(), );
JNIEnv *env = JNIUtil::getEnv();
- jclass outputStreamClass = env->FindClass("java/io/OutputStream");
- if (outputStreamClass == NULL)
- return;
-
- jmethodID writeMethod = env->GetMethodID(outputStreamClass, "write",
- "([BII)V");
- if (writeMethod == NULL)
- return;
-
- // Create the buffer.
- jbyteArray buffer = env->NewByteArray(bufSize);
- if (JNIUtil::isJavaExceptionThrown())
- return;
-
- jbyte *bufData = env->GetByteArrayElements(buffer, NULL);
- if (JNIUtil::isJavaExceptionThrown())
- return;
-
- size_t contentSize = 0;
- svn_stream_t *read_stream = createReadStream(requestPool.pool(), path,
- revision, pegRevision,
- contentSize);
- if (read_stream == NULL)
+ svn_client_ctx_t *ctx = context.getContext(NULL);
+ if (ctx == NULL)
return;
- while (contentSize > 0)
- {
- size_t readSize = bufSize > contentSize ? contentSize : bufSize;
- svn_error_t *err;
-
- err = svn_stream_read(read_stream, (char *)bufData, &readSize);
- if (err != NULL)
- {
- env->ReleaseByteArrayElements(buffer, bufData, 0);
- svn_stream_close(read_stream);
- SVN_JNI_ERR(err, );
- }
-
- env->ReleaseByteArrayElements(buffer, bufData, JNI_COMMIT);
- env->CallVoidMethod(outputStream, writeMethod, buffer, 0, readSize);
- if (JNIUtil::isJavaExceptionThrown())
- {
- env->ReleaseByteArrayElements(buffer, bufData, 0);
- svn_stream_close(read_stream);
- return;
- }
- contentSize -= readSize;
- }
-
- env->ReleaseByteArrayElements(buffer, bufData, 0);
- return;
-}
-
-svn_stream_t *SVNClient::createReadStream(apr_pool_t *pool, const char *path,
- Revision &revision,
- Revision &pegRevision, size_t &size)
-{
- svn_stream_t *read_stream = NULL;
-
- if (revision.revision()->kind == svn_opt_revision_working)
- {
- // We want the working copy. Going back to the server returns
- // base instead (which is not what we want).
- apr_file_t *file = NULL;
- apr_finfo_t finfo;
- apr_status_t apr_err = apr_stat(&finfo, path, APR_FINFO_MIN, pool);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, _("open file"));
- return NULL;
- }
- apr_err = apr_file_open(&file, path, APR_READ, 0, pool);
- if (apr_err)
- {
- JNIUtil::handleAPRError(apr_err, _("open file"));
- return NULL;
- }
- read_stream = svn_stream_from_aprfile2(file, TRUE, pool);
- size = finfo.size;
- }
- else
- {
- svn_client_ctx_t *ctx = context.getContext(NULL);
- if (ctx == NULL)
- return NULL;
-
- svn_stringbuf_t *buf = svn_stringbuf_create("", pool);
- read_stream = svn_stream_from_stringbuf(buf, pool);
- SVN_JNI_ERR(svn_client_cat2(read_stream, path, pegRevision.revision(),
- revision.revision(), ctx, pool),
- NULL);
- size = buf->len;
- }
-
- return read_stream;
+ SVN_JNI_ERR(svn_client_cat2(outputStream.getStream(requestPool),
+ path, pegRevision.revision(),
+ revision.revision(), ctx, requestPool.pool()),
+ );
}
jbyteArray SVNClient::revProperty(const char *path,
@@ -1528,7 +1408,7 @@ jobject SVNClient::revProperties(const c
&set_rev, ctx, requestPool.pool()),
NULL);
- return CreateJ::PropertyMap(props, requestPool.pool());
+ return CreateJ::PropertyMap(props);
}
struct info_baton
@@ -1580,10 +1460,11 @@ SVNClient::patch(const char *patchPath,
Path checkedTargetPath(targetPath);
SVN_JNI_ERR(checkedTargetPath.error_occured(), );
+ // Should parameterize the following, instead of defaulting to FALSE
SVN_JNI_ERR(svn_client_patch(checkedPatchPath.c_str(),
checkedTargetPath.c_str(),
- dryRun, stripCount, reverse, ignoreWhitespace,
- removeTempfiles,
+ dryRun, stripCount, FALSE, reverse,
+ ignoreWhitespace, removeTempfiles,
PatchCallback::callback, callback,
ctx, requestPool.pool(),
requestPool.pool()), );
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/SVNClient.h Tue Sep 28 17:35:22 2010
@@ -47,6 +47,7 @@ class InfoCallback;
class CommitCallback;
class ListCallback;
class StatusCallback;
+class OutputStream;
class PatchCallback;
class ChangelistCallback;
class CommitMessage;
@@ -75,11 +76,8 @@ class SVNClient :public SVNBase
BlameCallback *callback);
void relocate(const char *from, const char *to, const char *path,
bool recurse);
- jbyteArray fileContent(const char *path, Revision &revision,
- Revision &pegRevision);
void streamFileContent(const char *path, Revision &revision,
- Revision &pegRevision, jobject outputStream,
- size_t bufSize);
+ Revision &pegRevision, OutputStream &outputStream);
void propertySet(const char *path, const char *name, const char *value,
svn_depth_t depth, StringArray &changelists, bool force,
RevpropTable &revprops, CommitCallback *callback);
@@ -199,9 +197,6 @@ class SVNClient :public SVNBase
SVNClient(jobject jthis_in);
virtual ~SVNClient();
private:
- svn_stream_t *createReadStream(apr_pool_t *pool, const char *path,
- Revision &revision, Revision &pegRevision,
- size_t &size);
/**
* Shared implementation for diff() APIs. When pegRevision is
* provided, revision1 and revision2 equate to startRevision and
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/native/org_apache_subversion_javahl_SVNClient.cpp Tue Sep 28 17:35:22 2010
@@ -32,6 +32,7 @@
#include "SVNClient.h"
#include "Revision.h"
#include "RevisionRange.h"
+#include "OutputStream.h"
#include "EnumMapper.h"
#include "CommitMessage.h"
#include "Prompter.h"
@@ -1309,37 +1310,10 @@ Java_org_apache_subversion_javahl_SVNCli
jignoreAncestry ? true : false, receiver);
}
-JNIEXPORT jbyteArray JNICALL
-Java_org_apache_subversion_javahl_SVNClient_fileContent
-(JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
- jobject jpegRevision)
-{
- JNIEntry(SVNClient, fileContent);
- SVNClient *cl = SVNClient::getCppObject(jthis);
- if (cl == NULL)
- {
- JNIUtil::throwError(_("bad C++ this"));
- return NULL;
- }
- JNIStringHolder path(jpath);
- if (JNIUtil::isExceptionThrown())
- return NULL;
-
- Revision revision(jrevision);
- if (JNIUtil::isExceptionThrown())
- return NULL;
-
- Revision pegRevision(jpegRevision);
- if (JNIUtil::isExceptionThrown())
- return NULL;
-
- return cl->fileContent(path, revision, pegRevision);
-}
-
JNIEXPORT void JNICALL
Java_org_apache_subversion_javahl_SVNClient_streamFileContent
(JNIEnv *env, jobject jthis, jstring jpath, jobject jrevision,
- jobject jpegRevision, jint bufSize, jobject jstream)
+ jobject jpegRevision, jobject jstream)
{
JNIEntry(SVNClient, streamFileContent);
SVNClient *cl = SVNClient::getCppObject(jthis);
@@ -1360,7 +1334,11 @@ Java_org_apache_subversion_javahl_SVNCli
if (JNIUtil::isExceptionThrown())
return;
- cl->streamFileContent(path, revision, pegRevision, jstream, bufSize);
+ OutputStream dataOut(jstream);
+ if (JNIUtil::isExceptionThrown())
+ return;
+
+ cl->streamFileContent(path, revision, pegRevision, dataOut);
}
JNIEXPORT jstring JNICALL
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/ISVNClient.java Tue Sep 28 17:35:22 2010
@@ -790,7 +790,7 @@ public interface ISVNClient
* @since 1.0
*/
void streamFileContent(String path, Revision revision, Revision pegRevision,
- int bufferSize, OutputStream stream)
+ OutputStream stream)
throws ClientException;
/**
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/apache/subversion/javahl/SVNClient.java Tue Sep 28 17:35:22 2010
@@ -26,6 +26,7 @@ package org.apache.subversion.javahl;
import org.apache.subversion.javahl.callback.*;
import java.io.OutputStream;
+import java.io.ByteArrayOutputStream;
import java.util.Collection;
import java.util.Set;
@@ -473,15 +474,21 @@ public class SVNClient implements ISVNCl
/**
* @since 1.2
*/
- public native byte[] fileContent(String path, Revision revision,
- Revision pegRevision)
- throws ClientException;
+ public byte[] fileContent(String path, Revision revision,
+ Revision pegRevision)
+ throws ClientException
+ {
+ ByteArrayOutputStream stream = new ByteArrayOutputStream();
+
+ streamFileContent(path, revision, pegRevision, stream);
+ return stream.toByteArray();
+ }
/**
* @since 1.0
*/
public native void streamFileContent(String path, Revision revision,
- Revision pegRevision, int bufferSize,
+ Revision pegRevision,
OutputStream stream)
throws ClientException;
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/src/org/tigris/subversion/javahl/SVNClient.java Tue Sep 28 17:35:22 2010
@@ -2105,7 +2105,7 @@ public class SVNClient implements SVNCli
aSVNClient.streamFileContent(path,
revision == null ? null : revision.toApache(),
pegRevision == null ? null : pegRevision.toApache(),
- bufferSize, stream);
+ stream);
}
catch (org.apache.subversion.javahl.ClientException ex)
{
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/apache/subversion/javahl/BasicTests.java Tue Sep 28 17:35:22 2010
@@ -1827,7 +1827,7 @@ public class BasicTests extends SVNTests
// get the content from the repository
ByteArrayOutputStream baos = new ByteArrayOutputStream();
client.streamFileContent(thisTest.getWCPath() + "/A/mu", null, null,
- 100, baos);
+ baos);
byte[] content = baos.toByteArray();
byte[] testContent = thisTest.getWc().getItemContent("A/mu").getBytes();
@@ -3118,10 +3118,9 @@ public class BasicTests extends SVNTests
tcTest.getWc().getItemContent("A/B/E/alpha"));
tcTest.getWc().setItemWorkingCopyRevision("A/B/F/alpha", 2);
// we expect the tree conflict to turn the existing item into
- // a scheduled-add with history. We expect the modifications in
- // the local file to have been copied to the new file.
+ // a scheduled-add with history.
tcTest.getWc().setItemTextStatus("A/B/E/alpha", Status.Kind.added);
- tcTest.getWc().setItemTextStatus("A/B/F/alpha", Status.Kind.modified);
+ tcTest.getWc().setItemTextStatus("A/B/F/alpha", Status.Kind.normal);
// check the status of the working copy of the tc test
tcTest.checkStatus();
Modified: subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java (original)
+++ subversion/branches/javahl-ra/subversion/bindings/javahl/tests/org/tigris/subversion/javahl/BasicTests.java Tue Sep 28 17:35:22 2010
@@ -3010,10 +3010,9 @@ public class BasicTests extends SVNTests
tcTest.getWc().getItemContent("A/B/E/alpha"));
tcTest.getWc().setItemWorkingCopyRevision("A/B/F/alpha", 2);
// we expect the tree conflict to turn the existing item into
- // a scheduled-add with history. We expect the modifications in
- // the local file to have been copied to the new file.
+ // a scheduled-add with history.
tcTest.getWc().setItemTextStatus("A/B/E/alpha", StatusKind.added);
- tcTest.getWc().setItemTextStatus("A/B/F/alpha", StatusKind.modified);
+ tcTest.getWc().setItemTextStatus("A/B/F/alpha", StatusKind.normal);
// check the status of the working copy of the tc test
tcTest.checkStatus();
Modified: subversion/branches/javahl-ra/subversion/include/mod_dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/mod_dav_svn.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/mod_dav_svn.h (original)
+++ subversion/branches/javahl-ra/subversion/include/mod_dav_svn.h Tue Sep 28 17:35:22 2010
@@ -48,8 +48,10 @@ extern "C" {
Three special substrings of the uri are returned for convenience:
- * REPOS_NAME: The single path component that is the directory
- which contains the repository.
+ * REPOS_BASENAME: The single path component that is the directory
+ which contains the repository. (Don't confuse
+ this with the "repository name" as optionally
+ defined via the SVNReposName directive!)
* RELATIVE_PATH: The remaining imaginary path components.
@@ -68,7 +70,7 @@ extern "C" {
ROOT_PATH of '/svn/repos'. But either way, we would get back:
* CLEANED_URI: /svn/repos/proj1/!svn/blah/13/A/B/alpha
- * REPOS_NAME: proj1
+ * REPOS_BASENAME: proj1
* RELATIVE_PATH: /!svn/blah/13/A/B/alpha
* REPOS_PATH: A/B/alpha
* TRAILING_SLASH: FALSE
@@ -78,7 +80,7 @@ AP_MODULE_DECLARE(dav_error *) dav_svn_s
const char *root_path,
const char **cleaned_uri,
int *trailing_slash,
- const char **repos_name,
+ const char **repos_basename,
const char **relative_path,
const char **repos_path);
Modified: subversion/branches/javahl-ra/subversion/include/private/svn_dav_protocol.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/private/svn_dav_protocol.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/private/svn_dav_protocol.h (original)
+++ subversion/branches/javahl-ra/subversion/include/private/svn_dav_protocol.h Tue Sep 28 17:35:22 2010
@@ -46,6 +46,17 @@ extern "C" {
#define SVN_DAV__INCLUDE_DESCENDANTS "include-descendants"
#define SVN_DAV__VERSION_NAME "version-name"
+/** Names of XML elements attributes and tags for svn_ra_change_rev_prop2()'s
+ extension of PROPPATCH. */
+#define SVN_DAV__OLD_VALUE "old-value"
+#define SVN_DAV__OLD_VALUE__ABSENT "absent"
+
+/** Helper typedef for svn_ra_change_rev_prop2() implementation. */
+typedef struct svn_dav__two_props_t {
+ const svn_string_t *const *old_value_p;
+ const svn_string_t *new_value;
+} svn_dav__two_props_t;
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
Modified: subversion/branches/javahl-ra/subversion/include/private/svn_sqlite.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/private/svn_sqlite.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/private/svn_sqlite.h (original)
+++ subversion/branches/javahl-ra/subversion/include/private/svn_sqlite.h Tue Sep 28 17:35:22 2010
@@ -165,7 +165,7 @@ svn_sqlite__prepare(svn_sqlite__stmt_t *
svn_error_t *
svn_sqlite__bindf(svn_sqlite__stmt_t *stmt, const char *fmt, ...);
-/* Error-handling wrapper around sqlite3_bind_int64. */
+/* Error-handling wrapper around sqlite3_bind_int. */
svn_error_t *
svn_sqlite__bind_int(svn_sqlite__stmt_t *stmt, int slot, int val);
Modified: subversion/branches/javahl-ra/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_client.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_client.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_client.h Tue Sep 28 17:35:22 2010
@@ -53,18 +53,6 @@ extern "C" {
#endif /* __cplusplus */
-/**
- ### @todo Multiple Targets
- - Up for debate: an update on multiple targets is *not* atomic.
- Right now, svn_client_update only takes one path. What's
- debatable is whether this should ever change. On the one hand,
- it's kind of losing to have the client application loop over
- targets and call svn_client_update() on each one; each call to
- update initializes a whole new repository session (network
- overhead, etc.) On the other hand, it's a very simple
- implementation, and allows for the possibility that different
- targets may come from different repositories. */
-
/**
* Get libsvn_client version information.
@@ -328,6 +316,22 @@ svn_client_get_ssl_client_cert_pw_prompt
/** @} */
/**
+ * Revisions and Peg Revisions
+ *
+ * @defgroup clnt_revisions Revisions and Peg Revisions
+ *
+ * A brief word on operative and peg revisions.
+ *
+ * If the kind of the peg revision is #svn_opt_revision_unspecified, then it
+ * defaults to #svn_opt_revision_head for URLs and #svn_opt_revision_working
+ * for local paths.
+ *
+ * For deeper insight, please see the
+ * <a href="http://svnbook.red-bean.com/nightly/en/svn.advanced.pegrevs.html">
+ * Peg and Operative Revisions</a> section of the Subversion Book.
+ */
+
+/**
* Commit operations
*
* @defgroup clnt_commit Client commit subsystem
@@ -893,7 +897,7 @@ typedef struct svn_client_ctx_t
void *cancel_baton;
/** notification function, defaulting to a function that forwards
- * to notify_func().
+ * to notify_func(). If @a NULL, it will not be invoked.
* @since New in 1.2. */
svn_wc_notify_func2_t notify_func2;
@@ -1040,56 +1044,47 @@ svn_client_args_to_target_array(apr_arra
/**
- * Checkout a working copy of @a URL at @a revision, looked up at @a
- * peg_revision, using @a path as the root directory of the newly
- * checked out working copy, and authenticating with the
- * authentication baton cached in @a ctx. If @a result_rev is not @c
- * NULL, set @a *result_rev to the value of the revision actually
- * checked out from the repository.
+ * Checkout a working copy from a repository.
*
- * If @a peg_revision->kind is #svn_opt_revision_unspecified, then it
- * defaults to #svn_opt_revision_head.
- *
- * @a revision must be of kind #svn_opt_revision_number,
- * #svn_opt_revision_head, or #svn_opt_revision_date. If
- * @a revision does not meet these requirements, return the error
- * #SVN_ERR_CLIENT_BAD_REVISION.
- *
- * If @a depth is #svn_depth_infinity, check out fully recursively.
- * Else if it is #svn_depth_immediates, check out @a URL and its
- * immediate entries (subdirectories will be present, but will be at
- * depth #svn_depth_empty themselves); else #svn_depth_files,
- * check out @a URL and its file entries, but no subdirectories; else
- * if #svn_depth_empty, check out @a URL as an empty directory at
- * that depth, with no entries present.
- *
- * If @a depth is #svn_depth_unknown, then behave as if for
- * #svn_depth_infinity, except in the case of resuming a previous
- * checkout of @a path (i.e., updating), in which case use the depth
- * of the existing working copy.
- *
- * If @a ignore_externals is set, don't process externals definitions
- * as part of this operation.
- *
- * If @a ctx->notify_func2 is non-NULL, invoke @a ctx->notify_func2 with
- * @a ctx->notify_baton2 as the checkout progresses.
- *
- * If @a allow_unver_obstructions is TRUE then the checkout tolerates
- * existing unversioned items that obstruct added paths from @a URL. 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 @a allow_unver_obstructions is FALSE then the checkout will abort
- * if there are any unversioned obstructing items.
- *
- * If @a URL refers to a file rather than a directory, return the
- * error #SVN_ERR_UNSUPPORTED_FEATURE. If @a URL does not exist,
- * return the error #SVN_ERR_RA_ILLEGAL_URL.
- *
- * Use @a pool for any temporary allocation.
+ * @param[out] result_rev If non-NULL, the value of the revision checked
+ * out form the repository.
+ * @param[in] URL The repository URL of the checkout source.
+ * @param[in] path The root of the new working copy.
+ * @param[in] peg_revision The peg revision.
+ * @param[in] revision The operative revision.
+ * @param[in] depth The depth of the operation. If #svn_depth_unknown,
+ * then behave as if for #svn_depth_infinity, except in the case
+ * of resuming a previous checkout of @a path (i.e., updating),
+ * in which case use the depth of the existing working copy.
+ * @param[in] ignore_externals If @c TRUE, don't process externals
+ * definitions as part of this operation.
+ * @param[in] allow_unver_obstructions If @c TRUE, then 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. <br>
+ * If @c FALSE, then abort if there are any unversioned
+ * obstructing items.
+ * @param[in] ctx The standard client context, used for authentication and
+ * notification.
+ * @param[in] pool Used for any temporary allocation.
+ *
+ * @return A pointer to an #svn_error_t of the type (this list is not
+ * exhaustive): <br>
+ * #SVN_ERR_UNSUPPORTED_FEATURE if @a URL refers to a file rather
+ * than a directory; <br>
+ * #SVN_ERR_RA_ILLEGAL_URL if @a URL does not exist; <br>
+ * #SVN_ERR_CLIENT_BAD_REVISION if @a revision is not one of
+ * #svn_opt_revision_number, #svn_opt_revision_head, or
+ * #svn_opt_revision_date. <br>
+ * If no error occurred, return #SVN_NO_ERROR.
*
* @since New in 1.5.
+ *
+ * @see #svn_depth_t <br> #svn_client_ctx_t <br> @ref clnt_revisions for
+ * a discussion of operative and peg revisions.
*/
svn_error_t *
svn_client_checkout3(svn_revnum_t *result_rev,
@@ -1201,6 +1196,17 @@ svn_client_checkout(svn_revnum_t *result
*
* Use @a pool for any temporary allocation.
*
+ * @todo Multiple Targets
+ * - Up for debate: an update on multiple targets is *not* atomic.
+ * Right now, svn_client_update only takes one path. What's
+ * debatable is whether this should ever change. On the one hand,
+ * it's kind of losing to have the client application loop over
+ * targets and call svn_client_update() on each one; each call to
+ * update initializes a whole new repository session (network
+ * overhead, etc.) On the other hand, it's a very simple
+ * implementation, and allows for the possibility that different
+ * targets may come from different repositories.
+ *
* @since New in 1.5.
*/
svn_error_t *
@@ -3412,18 +3418,35 @@ svn_client_upgrade(const char *dir,
*/
/**
- * Modify a working copy directory @a dir, changing any
- * repository URLs that begin with @a from to begin with @a to instead,
- * recursing into subdirectories if @a recurse is TRUE.
+ * Recursively modify a working copy rooted at @a wcroot_dir, changing any
+ * repository URLs that begin with @a from to begin with @a to instead.
*
- * @param dir Working copy directory
+ * @param wcroot_dir Working copy root directory
* @param from Original URL
* @param to New URL
- * @param recurse Whether to recurse
* @param ctx svn_client_ctx_t
* @param pool The pool from which to perform memory allocations
+ *
+ * @since New in 1.7
*/
svn_error_t *
+svn_client_relocate2(const char *wcroot_dir,
+ const char *from,
+ const char *to,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_client_relocate2().
+ *
+ * @note As of the 1.7 API, @a dir is required to be a working copy
+ * root directory, and @a recurse is required to be TRUE.
+ *
+ * @deprecated Provided for limited backwards compatibility with the
+ * 1.6 API.
+ */
+SVN_DEPRECATED
+svn_error_t *
svn_client_relocate(const char *dir,
const char *from,
const char *to,
@@ -3431,7 +3454,6 @@ svn_client_relocate(const char *dir,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
-
/** @} */
/**
@@ -3789,10 +3811,6 @@ svn_client_copy(svn_client_commit_info_t
* is a directory it will remain in the working copy but all the files,
* and unversioned items, it contains will be removed.
*
- * - If one of @a src_paths contains locally modified and/or unversioned
- * items and @a force is not set, the move will fail. If @a force is set
- * such items 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
@@ -3839,7 +3857,6 @@ svn_client_copy(svn_client_commit_info_t
svn_error_t *
svn_client_move6(const apr_array_header_t *src_paths,
const char *dst_path,
- svn_boolean_t force,
svn_boolean_t move_as_child,
svn_boolean_t make_parents,
const apr_hash_t *revprop_table,
@@ -3852,6 +3869,9 @@ svn_client_move6(const apr_array_header_
* Similar to svn_client_move6(), but returns the @a commit_info_p directly,
* rather than through @a commit_callback.
*
+ * A WC-to-WC move will include any modified and/or unversioned children.
+ * @a force is ignored.
+ *
* @since New in 1.5.
* @deprecated Provided for backward compatibility with the 1.6 API.
*/
@@ -3872,6 +3892,11 @@ svn_client_move5(svn_commit_info_t **com
* move_as_child set to @c FALSE, @a revprop_table passed as NULL, and
* @a make_parents set to @c FALSE.
*
+ * Note: The behaviour of @a force changed in r860885 and r861421, when the
+ * 'move' semantics were improved to just move the source including any
+ * modified and/or unversioned items in it. Before that, @a force
+ * controlled what happened to such items, but now @a force is ignored.
+ *
* @since New in 1.4.
*
* @deprecated Provided for backward compatibility with the 1.4 API.
@@ -4094,6 +4119,12 @@ svn_client_propset(const char *propname,
* new value. (To check that an old value is still non-existent, set
* @a original_propval->data to NULL, and @a original_propval->len is
* ignored.)
+ * If the server advertises #SVN_RA_CAPABILITY_ATOMIC_REVPROPS, the
+ * check of @a original_propval is done atomically.
+ *
+ * Note: the representation of "property is not set" in @a
+ * original_propval differs from the representation in other APIs
+ * (such as svn_fs_change_rev_prop2() and svn_ra_change_rev_prop2()).
*
* If @a force is TRUE, allow newlines in the author property.
*
@@ -4685,26 +4716,30 @@ svn_client_ls(apr_hash_t **dirents,
*/
/**
- * Output the content of file identified by @a path_or_url and @a
- * revision to the stream @a out. 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.
- *
- * If @a path_or_url is not a local path, then if @a revision is of
- * kind #svn_opt_revision_previous (or some other kind that requires
- * a local path), an error will be returned, because the desired
- * revision cannot be determined.
- *
- * Use the authentication baton cached in @a ctx to authenticate against the
- * repository.
+ * Output the content of a file.
*
- * Perform all allocations from @a pool.
- *
- * ### @todo Add an expansion/translation flag?
+ * @param[in] out The stream to which the content will be written.
+ * @param[in] path_or_url The path or URL of the file.
+ * @param[in] peg_revision The peg revision.
+ * @param[in] revision The operative revision.
+ * @param[in] ctx The standard client context, used for possible
+ * authentication.
+ * @param[in] pool Used for any temporary allocation.
+ *
+ * @todo Add an expansion/translation flag?
+ *
+ * @return A pointer to an #svn_error_t of the type (this list is not
+ * exhaustive): <br>
+ * An unspecified error if @a revision is of kind
+ * #svn_opt_revision_previous (or some other kind that requires
+ * a local path), because the desired revision cannot be
+ * determined. <br>
+ * If no error occurred, return #SVN_NO_ERROR.
*
* @since New in 1.2.
+ *
+ * @see #svn_client_ctx_t <br> @ref clnt_revisions for
+ * a discussion of operative and peg revisions.
*/
svn_error_t *
svn_client_cat2(svn_stream_t *out,
@@ -5224,6 +5259,15 @@ typedef svn_error_t *(*svn_client_patch_
* stripped from paths obtained from the patch. It is an error if a
* negative strip count is passed.
*
+ * If @a old_patch_target_names is @c TRUE, use target names from the old
+ * side of the patch, rather than using target names from the new side of
+ * the patch. For instance, if a unidiff header contains
+ * --- foo.c
+ * +++ foo.c.new
+ * and @a old_patch_target_names is @c TRUE, the name "foo.c" will be used
+ * for the target, and if @a old_patch_target_names is @c FALSE, the target
+ * name "foo.c.new" will be used.
+ *
* If @a reverse is @c TRUE, apply patches in reverse, deleting lines
* the patch would add and adding lines the patch would delete.
* This is useful when applying a unidiff which was created with the
@@ -5255,6 +5299,7 @@ svn_client_patch(const char *patch_abspa
const char *local_abspath,
svn_boolean_t dry_run,
int strip_count,
+ svn_boolean_t old_patch_target_names,
svn_boolean_t reverse,
svn_boolean_t ignore_whitespace,
svn_boolean_t remove_tempfiles,
Modified: subversion/branches/javahl-ra/subversion/include/svn_dav.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_dav.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_dav.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_dav.h Tue Sep 28 17:35:22 2010
@@ -243,6 +243,12 @@ extern "C" {
#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 enforce
+ * old-value atomicity in PROPPATCH (for editing revprops). */
+#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 handle
* a replay of a directory in the repository (not root). */
#define SVN_DAV_NS_DAV_SVN_PARTIAL_REPLAY\
Modified: subversion/branches/javahl-ra/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_error.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_error.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_error.h Tue Sep 28 17:35:22 2010
@@ -193,6 +193,15 @@ svn_error_compose(svn_error_t *chain,
svn_error_t *
svn_error_root_cause(svn_error_t *err);
+/** Return TRUE if @a err's chain contains the error code @a apr_err.
+ *
+ * If @a err is #SVN_NO_ERROR, return FALSE.
+ *
+ * @since New in 1.7.
+ */
+svn_boolean_t
+svn_error_has_cause(svn_error_t *err, apr_status_t apr_err);
+
/** Create a new error that is a deep copy of @a err and return it.
*
* @since New in 1.2.
Modified: subversion/branches/javahl-ra/subversion/include/svn_error_codes.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_error_codes.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_error_codes.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_error_codes.h Tue Sep 28 17:35:22 2010
@@ -365,14 +365,14 @@ SVN_ERROR_START
SVN_ERR_WC_CATEGORY_START + 6,
"Invalid lock")
- /** Previously this error number was used by SVN_ERR_WC_NOT_DIRECTORY, which
+ /** Previously this error number was used by #SVN_ERR_WC_NOT_DIRECTORY, which
* is now an alias for this error.
* @since Since 1.7. */
SVN_ERRDEF(SVN_ERR_WC_NOT_WORKING_COPY,
SVN_ERR_WC_CATEGORY_START + 7,
"Path is not a working copy directory")
- /* This name is deprecated. Use SVN_ERR_WC_NOT_WORKING_COPY.
+ /** This name is deprecated. Use #SVN_ERR_WC_NOT_WORKING_COPY.
* @deprecated Provided for backward compatibility with the 1.6 API. */
#define SVN_ERR_WC_NOT_DIRECTORY SVN_ERR_WC_NOT_WORKING_COPY
@@ -738,6 +738,12 @@ SVN_ERROR_START
SVN_ERR_FS_CATEGORY_START + 48,
"Filesystem has no such checksum-representation index record")
+ /** @since New in 1.7. */
+ SVN_ERRDEF(SVN_ERR_FS_PROP_BASEVALUE_MISMATCH,
+ SVN_ERR_FS_CATEGORY_START + 49,
+ "Property value in filesystem differs from the provided "
+ "base value")
+
/* repos errors */
SVN_ERRDEF(SVN_ERR_REPOS_LOCKED,
@@ -1328,12 +1334,12 @@ SVN_ERROR_START
SVN_ERR_MISC_CATEGORY_START + 32,
"Unsupported schema found in SQLite db")
-/** @since New in 1.7. */
+ /** @since New in 1.7. */
SVN_ERRDEF(SVN_ERR_SQLITE_BUSY,
SVN_ERR_MISC_CATEGORY_START + 33,
"The SQLite db is busy")
-/** @since New in 1.7. */
+ /** @since New in 1.7. */
SVN_ERRDEF(SVN_ERR_SQLITE_RESETTING_FOR_ROLLBACK,
SVN_ERR_MISC_CATEGORY_START + 34,
"SQLite busy at transaction rollback; "
Modified: subversion/branches/javahl-ra/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_fs.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_fs.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_fs.h Tue Sep 28 17:35:22 2010
@@ -1894,10 +1894,11 @@ svn_fs_revision_proplist(apr_hash_t **ta
* - @a fs is a filesystem, and @a rev is the revision in that filesystem
* whose property should change.
* - @a name is the name of the property to change.
- * - if @a old_value_p is not @c NULL, then @a *old_value_p is the expected old
- * value of the property, and changing the value will fail with error
- * #SVN_ERR_BAD_PROPERTY_VALUE if the present value of the property is not @a
- * *old_value_p.
+ * - if @a old_value_p is not @c NULL, then changing the property will fail with
+ * error #SVN_ERR_FS_PROP_BASEVALUE_MISMATCH if the present value of the
+ * property is not @a *old_value_p. (This is an atomic test-and-set).
+ * @a *old_value_p may be @c NULL, representing that the property must be not
+ * already set.
* - @a value is the new value of the property, or zero if the property should
* be removed altogether.
*
Modified: subversion/branches/javahl-ra/subversion/include/svn_io.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_io.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_io.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_io.h Tue Sep 28 17:35:22 2010
@@ -248,7 +248,10 @@ svn_io_open_uniquely_named(apr_file_t **
* 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 @a delete_when
+ * is @c 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
* remove the temporary file to avoid filling up the system temp directory.
* It is often appropriate to bind the lifetime of the temporary file to
Modified: subversion/branches/javahl-ra/subversion/include/svn_ra.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_ra.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_ra.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_ra.h Tue Sep 28 17:35:22 2010
@@ -746,12 +746,40 @@ svn_ra_get_dated_revision(svn_ra_session
*
* If @a value is @c NULL, delete the named revision property.
*
+ * If the server advertises the #SVN_RA_CAPABILITY_ATOMIC_REVPROPS capability
+ * and @a old_value_p is not @c NULL, then changing the property will fail with
+ * an error chain that contains #SVN_ERR_FS_PROP_BASEVALUE_MISMATCH if the
+ * present value of the property is not @a *old_value_p. (This is an atomic
+ * test-and-set).
+ * @a *old_value_p may be @c NULL, representing that the property must be not
+ * already set.
+ *
+ * If the capability is not advertised, then @a old_value_p MUST be @c NULL.
+ *
* Please note that properties attached to revisions are @em unversioned.
*
* Use @a pool for memory allocation.
*
+ * @see svn_fs_change_rev_prop2(), svn_error_has_cause().
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_ra_change_rev_prop2(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);
+
+/**
+ * Similar to svn_ra_change_rev_prop2(), but with @a old_value_p set
+ * to @c NULL.
+ *
* @since New in 1.2.
+ * @deprecated Provided for backward compatibility with the 1.6 API.
*/
+SVN_DEPRECATED
svn_error_t *
svn_ra_change_rev_prop(svn_ra_session_t *session,
svn_revnum_t rev,
@@ -1913,6 +1941,14 @@ svn_ra_has_capability(svn_ra_session_t *
*/
#define SVN_RA_CAPABILITY_COMMIT_REVPROPS "commit-revprops"
+/**
+ * The capability of specifying (and atomically verifying) expected
+ * preexisting values when modifying revprops.
+ *
+ * @since New in 1.7.
+ */
+#define SVN_RA_CAPABILITY_ATOMIC_REVPROPS "atomic-revprops"
+
/* *** PLEASE READ THIS IF YOU ADD A NEW CAPABILITY ***
*
* RA layers generally fetch all capabilities when asked about any
Modified: subversion/branches/javahl-ra/subversion/include/svn_ra_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_ra_svn.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_ra_svn.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_ra_svn.h Tue Sep 28 17:35:22 2010
@@ -60,6 +60,8 @@ extern "C" {
#define SVN_RA_SVN_CAP_LOG_REVPROPS "log-revprops"
/* maps to SVN_RA_CAPABILITY_PARTIAL_REPLAY */
#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"
/** 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.
Modified: subversion/branches/javahl-ra/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/javahl-ra/subversion/include/svn_repos.h?rev=1002283&r1=1002282&r2=1002283&view=diff
==============================================================================
--- subversion/branches/javahl-ra/subversion/include/svn_repos.h (original)
+++ subversion/branches/javahl-ra/subversion/include/svn_repos.h Tue Sep 28 17:35:22 2010
@@ -1994,28 +1994,55 @@ svn_repos_fs_get_locks(apr_hash_t **lock
/** @} */
/**
- * Like svn_fs_change_rev_prop(), but validate the name and value of the
+ * Like svn_fs_change_rev_prop2(), but validate the name and value of the
* property and invoke the @a repos's pre- and post-revprop-change hooks
* around the change as specified by @a use_pre_revprop_change_hook and
* @a use_post_revprop_change_hook (respectively).
*
* @a rev is the revision whose property to change, @a name is the
* name of the property, and @a new_value is the new value of the
- * property. @a author is the authenticated username of the person
+ * property. If @a old_value_p is not @c NULL, then @a *old_value_p
+ * is the expected current (preexisting) value of the property (or @c NULL
+ * for "unset"). @a author is the authenticated username of the person
* changing the property value, or NULL if not available.
*
* If @a authz_read_func is non-NULL, then use it (with @a
* authz_read_baton) to validate the changed-paths associated with @a
* rev. If the revision contains any unreadable changed paths, then
- * return SVN_ERR_AUTHZ_UNREADABLE.
+ * return #SVN_ERR_AUTHZ_UNREADABLE.
*
* Validate @a name and @a new_value like the same way
* svn_repos_fs_change_node_prop() does.
*
* Use @a pool for temporary allocations.
*
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_repos_fs_change_rev_prop4(svn_repos_t *repos,
+ svn_revnum_t rev,
+ const char *author,
+ const char *name,
+ const svn_string_t *const *old_value_p,
+ const svn_string_t *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,
+ void *authz_read_baton,
+ apr_pool_t *pool);
+
+/**
+ * Similar to svn_repos_fs_change_rev_prop4(), but with @a old_value_p always
+ * set to @c NULL. (In other words, it is similar to
+ * svn_fs_change_rev_prop().)
+ *
+ * @deprecated Provided for backward compatibility with the 1.6 API.
* @since New in 1.5.
*/
+SVN_DEPRECATED
svn_error_t *
svn_repos_fs_change_rev_prop3(svn_repos_t *repos,
svn_revnum_t rev,