You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by jc...@apache.org on 2011/02/06 23:19:13 UTC

svn commit: r1067787 [1/9] - in /subversion/branches/diff-optimizations-bytes: ./ build/ notes/ notes/commit-access-templates/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion/libsvn_diff/ su...

Author: jcorvel
Date: Sun Feb  6 22:19:08 2011
New Revision: 1067787

URL: http://svn.apache.org/viewvc?rev=1067787&view=rev
Log:
On the diff-optimizations-bytes branch:

Bring up-to-date with trunk.

Added:
    subversion/branches/diff-optimizations-bytes/notes/xfail-status
      - copied unchanged from r1067783, subversion/trunk/notes/xfail-status
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_fs_util/caching.c
      - copied unchanged from r1067783, subversion/trunk/subversion/libsvn_fs_util/caching.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/cache-membuffer.c
      - copied unchanged from r1067783, subversion/trunk/subversion/libsvn_subr/cache-membuffer.c
    subversion/branches/diff-optimizations-bytes/tools/dev/windows-build/
      - copied from r1067783, subversion/trunk/tools/dev/windows-build/
    subversion/branches/diff-optimizations-bytes/tools/dev/windows-build/Makefile
      - copied unchanged from r1067783, subversion/trunk/tools/dev/windows-build/Makefile
    subversion/branches/diff-optimizations-bytes/tools/dev/windows-build/README
      - copied unchanged from r1067783, subversion/trunk/tools/dev/windows-build/README
    subversion/branches/diff-optimizations-bytes/tools/dev/windows-build/document-version.pl
      - copied unchanged from r1067783, subversion/trunk/tools/dev/windows-build/document-version.pl
Modified:
    subversion/branches/diff-optimizations-bytes/   (props changed)
    subversion/branches/diff-optimizations-bytes/CHANGES
    subversion/branches/diff-optimizations-bytes/COMMITTERS
    subversion/branches/diff-optimizations-bytes/build/run_tests.py
    subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/full-committer.tmpl
    subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/pmc-member.tmpl
    subversion/branches/diff-optimizations-bytes/notes/variance-adjusted-patching.html
    subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_adler32.h   (props changed)
    subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_cache.h
    subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_eol_private.h
    subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_fs_private.h
    subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_wc_private.h
    subversion/branches/diff-optimizations-bytes/subversion/include/svn_checksum.h
    subversion/branches/diff-optimizations-bytes/subversion/include/svn_dirent_uri.h
    subversion/branches/diff-optimizations-bytes/subversion/include/svn_error.h
    subversion/branches/diff-optimizations-bytes/subversion/include/svn_fs.h
    subversion/branches/diff-optimizations-bytes/subversion/include/svn_repos.h
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/add.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/commit_util.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/export.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/externals.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/list.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/log.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/mergeinfo.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/prop_commands.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/repos_diff.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_delta/compose_delta.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff4.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_fs_fs/caching.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra/compat.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_local/ra_plugin.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/commit.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/fetch.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/get_deleted_rev.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/get_location_segments.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/merge.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/props.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/util.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_serf/util.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_svn/protocol
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/authz.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/commit.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/delta.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/dump.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/load-fs-vtable.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/log.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/node_tree.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_repos/rev_hunt.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/adler32.c   (contents, props changed)
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/checksum.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/dirent_uri.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/error.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/io.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_subr/target.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/adm_ops.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/diff.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/props.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/update_editor.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc-queries.sql
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc_db.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/wc_db.h
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/workqueue.c
    subversion/branches/diff-optimizations-bytes/subversion/libsvn_wc/workqueue.h
    subversion/branches/diff-optimizations-bytes/subversion/mod_authz_svn/mod_authz_svn.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/activity.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/merge.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/mirror.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/mod_dav_svn.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/reports/deleted-rev.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/reports/file-revs.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/reports/get-location-segments.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/reports/get-locations.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/reports/log.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/reports/mergeinfo.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/reports/update.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/repos.c
    subversion/branches/diff-optimizations-bytes/subversion/mod_dav_svn/util.c
    subversion/branches/diff-optimizations-bytes/subversion/po/fr.po
    subversion/branches/diff-optimizations-bytes/subversion/po/zh_CN.po
    subversion/branches/diff-optimizations-bytes/subversion/svn/main.c
    subversion/branches/diff-optimizations-bytes/subversion/svnserve/main.c
    subversion/branches/diff-optimizations-bytes/subversion/svnserve/serve.c
    subversion/branches/diff-optimizations-bytes/subversion/svnserve/server.h
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/authz_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/autoprop_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/basic_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/blame_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/cat_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/changelist_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/checkout_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/commit_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/copy_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/depth_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/diff_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/export_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/externals_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/history_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/import_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/info_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/input_validation_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/lock_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/log_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/merge_authz_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/merge_reintegrate_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/merge_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/merge_tree_conflict_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/mergeinfo_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/obliterate_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/patch_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/prop_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/redirect_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/resolve_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/resolved_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/revert_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/schedule_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/special_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/stat_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svnadmin_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svndumpfilter_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svnlook_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svnrdump_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svnsync_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svntest/main.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svntest/testcase.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/svnversion_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/switch_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/trans_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/tree_conflict_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/update_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/upgrade_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/cmdline/utf8_tests.py
    subversion/branches/diff-optimizations-bytes/subversion/tests/libsvn_repos/repos-test.c
    subversion/branches/diff-optimizations-bytes/subversion/tests/libsvn_subr/dirent_uri-test.c
    subversion/branches/diff-optimizations-bytes/subversion/tests/libsvn_subr/stream-test.c
    subversion/branches/diff-optimizations-bytes/tools/buildbot/master/Feeder.py
    subversion/branches/diff-optimizations-bytes/tools/client-side/bash_completion
    subversion/branches/diff-optimizations-bytes/tools/client-side/svnmucc/svnmucc-test.py
    subversion/branches/diff-optimizations-bytes/tools/client-side/svnmucc/svnmucc.c
    subversion/branches/diff-optimizations-bytes/tools/dev/check-license.py
    subversion/branches/diff-optimizations-bytes/tools/dev/svnraisetreeconflict/main.c
    subversion/branches/diff-optimizations-bytes/tools/server-side/svn-populate-node-origins-index.c

Propchange: subversion/branches/diff-optimizations-bytes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Feb  6 22:19:08 2011
@@ -11,6 +11,7 @@
 /subversion/branches/gnome-keyring:870558-871410
 /subversion/branches/http-protocol-v2:874395-876041
 /subversion/branches/in-memory-cache:869829-871452
+/subversion/branches/integrate-cache-membuffer:998649-998852
 /subversion/branches/issue-2779-dev:965496-984198
 /subversion/branches/issue-2843-dev:871432-874179
 /subversion/branches/issue-3000:871713,871716-871719,871721-871726,871728,871734
@@ -24,7 +25,7 @@
 /subversion/branches/log-g-performance:870941-871032
 /subversion/branches/merge-skips-obstructions:874525-874615
 /subversion/branches/nfc-nfd-aware-client:870276,870376
-/subversion/branches/performance:982355,983764,983766,984927,984984,985014,985037,985046,985472,985477,985482,985500,985606,985669,986453,987888,987893,995507,995603,1001413,1025660,1028092,1028094,1028104,1029038,1029042,1029090,1029092,1029335,1030763
+/subversion/branches/performance:979193,980118,981087,981684,982043,982355,983764,983766,984927,984973,984984,985014,985037,985046,985472,985477,985482,985500,985606,985669,986453,987888,987893,988319,990541,990568,990572,990600,990759,992899,992911,993127,993141,994956,995478,995507,995603,998858,999098,1001413,1001417,1004291,1022668,1022670,1022676,1022715,1022719,1025660,1025672,1027193,1027203,1027206,1027214,1027227,1028077,1028092,1028094,1028104,1028107,1028111,1028354,1029038,1029042-1029043,1029078,1029080,1029090,1029092-1029093,1029111,1029158,1029232,1029335,1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1039511,1043705,1053735,1056015,1066452,1067683
 /subversion/branches/py-tests-as-modules:956579-1033052
 /subversion/branches/ra_serf-digest-authn:875693-876404
 /subversion/branches/reintegrate-improvements:873853-874164
@@ -41,4 +42,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
-/subversion/trunk:1031270-1064450
+/subversion/trunk:1031270-1067783

Modified: subversion/branches/diff-optimizations-bytes/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/CHANGES?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/CHANGES (original)
+++ subversion/branches/diff-optimizations-bytes/CHANGES Sun Feb  6 22:19:08 2011
@@ -1,3 +1,120 @@
+Version 1.7.0
+(?? ??? 2011, from /branches/1.7.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.7.0
+
+ User-visible changes:
+  - General:
+
+  - Major new features:
+    * Less verbose HTTP-based repository access protocol (issue #1161, #3371)
+    * Rewritten working copy metadata storage (issue #3357)
+    * New 'svn patch' subcommand (issue #511)
+    * Property packing on FSFS backends (issue #3444)
+
+  - Minor new features and improvements:
+    * Better handling of HTTP redirects (issue #2779)
+    * Improved and much more consistent path handling (issue #2028, and others)
+    * 'svnadmin load' rewrites changed revnums in mergeinfo (issue #3020)
+    * Error message and help text improvements
+    * 'svn log' can print unidiff of changes made in a revision (issue #2909)
+    * 'svn diff' can print git-style unidiff annotations 
+    * svnsync can now steal locks on a mirror repository (issue #3309)
+    * display the wc root in the output of 'svn info' (issue #3355)
+    * add '--ie' as an alias for '--ignore-externals' (issue #3436)
+    * add 'svnlook filesize' (issue #3509)
+    * add 'svnsync --disable-locking' (issue #3545)
+    * subtree merges don't unconditionally stop reintegrate merge (issue #3577)
+    * 'svn --relocate' updates relative externals (issue #3597)
+    * allow svnsync users to specify the source repo (issue #3637)
+    * remove redundant mergeinfo notifications for 2-URL merges (issue #3671)
+    * 'svn export' into the current directory (issue #3727)
+    * added '--parents' to 'svn update' (issue #3748)
+
+  - Client-side bugfixes:
+    * 'svn cp A B; svn mv B C' is equivalent to 'svn cp A C' (issue #756)
+    * revert fetches missing directories from the server (issue #1040)
+    * allow subdirs of moved dirs to be moved and committed (issue #1259)
+    * improved performance of 'svn mv' with whole directories (issue #1284)
+    * 'svn rm B; svn cp A B' now works (issue #1516)
+    * 'svn diff URL1 URL2' now reverse of 'svn diff URL2 URL1) (issue #2333)
+    * error if relocating to an unused URL (issue #2531)
+    * 'svn blame -rWORKING' is now supported (issue #2544)
+    * improve correctness of commit on a relocated wc over ra_dav (issue #2578)
+    * add early error to 'svn add --auto-props' with mixed eols (issue #2713)
+    * allow 'svn diff' to accept symlinks as targets (issue #2716)
+    * don't lose props for replaced items (issue #2743)
+    * handle mergeinfo for subtrees removed outside of svn (issue #2915)
+    * add ability to force 'svn diff' to use internal diff (issue #3701)
+    * correctly recover a schedule-for-delete rm'd outside of svn (issue #3106)
+    * don't create self-referential mergeinfo from own history (issue #3157)
+    * improve 'svn log -g' handling of bad mergeinfo source paths (issue #3270)
+    * better conflict stat printing (issue #3342, issue #3594)
+    * 'svn update' restores excluded files (issue #3544)
+    * allow reintegrate merges into WCs with missing subtrees (issue #3603)
+    * more gracefully error when given back cmdline input (issue #3620)
+    * update exit codes to reflect command failure (issue #3622)
+    * don't double-update file externals (issue #3665)
+    * improve output of multi-target update (issue #3693)
+    * make 'svn up --set-depth=exclude FILE' work (issue #3736)
+    * fixed: wc-to-wc copy of a switch source (issue #1802)
+    * fixed: 'svn st' reports symlinks as obstructed items (issue #2284)
+    * fixed: 'cd e:\; svn up e:\' fails (issue #2556)
+    * fixed: svn aborts on commiting from root dir on windows (issue #3346)
+    * fixed: removing a dir scheduled for deletion corrupts wc (issue #2741)
+    * fixed: 'svn cleanup' fails on obstructed paths (issue #2867)
+    * fixed: case-only renames resulting from merges don't work (issue #3115)
+    * fixed: 'svn mergeinfo' ignores peg rev for wc target (issue #3180)
+    * fixed: unable to merge to wc of deleted branch (issue #3221)
+    * fixed: move via merge leaves behind versioned move source (issue #3324)
+    * fixed: ra_serf does not honor http-proxy-exceptions (issue #3428)
+    * fixed: 'svn mv A B; svn mv B A' loses history (issue #3429)
+    * fixed: ra_serf doesn't support http-auth-types config (issue #3435)
+    * fixed: merge sets incorrect mergeinfo on skipped paths (issue #3440)
+    * fixed: ra_serf inconsistent handling of cached authn creds (issue #3450)
+    * fixed: excluded subtrees are not detected by svnversion (issue #3461)
+    * fixed: submitting a changelist while obstructed item exists (issue #3484)
+    * fixed: crash when changing an external's URL (issue #3530)
+    * fixed: target moved after branching breaks reintegrate (issue #3640)
+    * fixed: potential race condition in svnsync (issue #3546)
+    * fixed: spurious merge conflicts with pre-1.7 mod_dav_svn (issue #3657)
+    * fixed: repeat merge is not a no-op (issue #3564)
+    * fixed: inheritance results in self-referential mergeinfo (issue #3668)
+    * fixed: inheritance results in nonexistent mergeinfo sources (issue #3669)
+    * fixed: memory leaks in ra_serf (issue #3684)
+    * fixed: corruption of 'svn pg' output for large properties (issue #3721)
+    * fixed: 'svnsync copy-revprops' doesn't sync revprop dels (issue #3728)
+  
+  - Server-side bugfixes:
+    * mod_dav_svn is less strict about auto-merging for commits (issue #1704)
+    * allow SVNListParentPath to be used with authz (issue #2753)
+    * allow nav to repo list from repo top with SVNListParentPath (issue #3159)
+    * allow repositories in the root of a drive on windows (issue #3535)
+    * don't destroy mergeinnfo with 'svnadmin load --parent-dir' (issue #3547)
+    * fixed: 'svnadmin hotcopy' does not duplicate symlinks (issue #2591)
+    * fixed: post-revprop-change errors cancel commit (issue #2990)
+    * fixed: mod_dav_svn runs pre-revprop-change hook twice (issue #3085)
+    * fixed: mod_dav_svn doesn't return stderr to user on failure (issue #3112)
+    * fixed: hotcopy may corrupt target rep-cache.db (issue #3596)
+    * fixed: mod_dav_svn can cause spurious merge conflicts (issue #3657)
+
+  - Other tool improvements and bugfixes:
+    * svnsync now takes the '--config-option' argument (issue #2027)
+
+ Developer-visible changes:
+  - General:
+    * improve building with sqlite on Windows (issue #3364)
+    * allow mod_dav_svn to compile against Apache 2.4 (issue #3548)
+
+  - API changes:
+    * don't crash svn_client_copy if ctx->log_msg_func is NULL (issue #3234)
+    * ra_serf now uses svn_error_t throughout (issue #3375)
+    * fixed: svn_ra_local__get_file() leaks file descriptors (issue #3290)
+
+  - Bindings:
+    * New JavaHL package: org.apache.subversion
+    * Deprecate the SVNClientSynchronized class in JavaHL (issue #2755)
+
+
 Version 1.6.15
 (26 Nov 2010, from /branches/1.6.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.6.15
@@ -12,7 +129,7 @@ http://svn.apache.org/repos/asf/subversi
             This has been tracked as CVE-2010-4644
    * prevent crash in mod_dav_svn when using SVNParentPath (r1033166)
             This has been tracked as CVE-2010-4539
-   * allow 'log -g' to continue in the face of invalid mergeinfo (r1028108)
+   * allow 'log -g' to continue in the face of invalid mergeinfo (issue #3270)
    * filter unreadable paths for 'svn ls' and 'svn co' (r997026, -070, -474)
    * fix abort in 'svn blame -g' (issue #3666)
    * fix file handle leak in ruby bindings (issue #3512)

Modified: subversion/branches/diff-optimizations-bytes/COMMITTERS
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/COMMITTERS?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/COMMITTERS [UTF-8] (original)
+++ subversion/branches/diff-optimizations-bytes/COMMITTERS [UTF-8] Sun Feb  6 22:19:08 2011
@@ -29,7 +29,7 @@ Blanket commit access:
            jaa   Jani Averbach <ja...@iki.fi>
     julianfoad   Julian Foad <ju...@wandisco.com>
   jszakmeister   John Szakmeister <jo...@szakmeister.net>
-           ehu   Erik Hülsmann <er...@wandisco.com>
+           ehu   Erik Hülsmann <eh...@gmail.com>
         breser   Ben Reser <be...@reser.org>
           maxb   Max Bowsher <ma...@ukf.net>
        dberlin   Daniel Berlin <db...@dberlin.org>
@@ -56,6 +56,7 @@ Blanket commit access:
        sbutler   Stephen Butler <sb...@elego.de>
         dannas   Daniel Näslund <da...@dannas.name>
        stefan2   Stefan Fuhrmann <st...@alice-dsl.de>
+       jcorvel   Johan Corveleyn <jc...@gmail.com>
 
 [[END ACTIVE FULL COMMITTERS.  LEAVE THIS LINE HERE; SCRIPTS LOOK FOR IT.]]
 
@@ -175,7 +176,8 @@ Commit access for specific areas:
           lark   Wang Jian <la...@linux.net.cn>               (po: zh_CN) [EMAIL
                                                              IS BOUNCING]
 giorgio_valoti   Giorgio Valoti <gi...@mac.com>          (po: it)
-        nebiac   Federico Nebiacolombo <ci...@amsjv.it>      (po: it)
+        nebiac   Federico Nebiacolombo <ci...@amsjv.it>      (po: it) [EMAIL
+                                                             IS BOUNCING]
         fabien   Fabien Coelho <fa...@coelho.net>           (po: fr)
        marcelg   Marcel Gosselin <ma...@polymtl.ca> (po: fr)
 
@@ -183,6 +185,7 @@ giorgio_valoti   Giorgio Valoti <giorgio
 
      gthompson   Glenn A. Thompson <gt...@cdr.net>       (pluggable-db br.)
        sigfred   Sigfred Håversen <bs...@mumak.com>        (svnserve-ssl br.)
+                                                             [EMAIL IS BOUNCING]
         pmarek   Ph. Marek <ph...@marek.priv.at>           (meta-data-v br.)
       jpeacock   John Peacock <jp...@rowman.com>          (perl-bindings-
                                                               improvements br.)
@@ -191,8 +194,6 @@ giorgio_valoti   Giorgio Valoti <giorgio
        cacknin   Charles Acknin <ch...@gmail.com>    (svnpatch-diff 
                                                               br.)
         holden   Holden Karau <ho...@pigscanfly.ca>         (scheme-bindings br.)
-       jcorvel   Johan Corveleyn <jc...@gmail.com>         (diff-
-                                                              optimizations br.)
 
   Subprojects that are complete, abandoned or have moved elsewhere:
 

Modified: subversion/branches/diff-optimizations-bytes/build/run_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/build/run_tests.py?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/build/run_tests.py (original)
+++ subversion/branches/diff-optimizations-bytes/build/run_tests.py Sun Feb  6 22:19:08 2011
@@ -390,11 +390,17 @@ class TestHarness:
       prog_f = None
     else:
       prog_f = progress_func
+      
+    if test_nums:
+      test_selection = [test_nums]
+    else:
+      test_selection = []
 
     failed = svntest.main.execute_tests(prog_mod.test_list,
                                         serial_only=serial_only,
                                         test_name=progbase,
-                                        progress_func=prog_f)
+                                        progress_func=prog_f,
+                                        test_selection=test_selection)
 
     # restore some values
     sys.path = old_path

Modified: subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/full-committer.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/full-committer.tmpl?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/full-committer.tmpl (original)
+++ subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/full-committer.tmpl Sun Feb  6 22:19:08 2011
@@ -29,9 +29,18 @@ notified that your account has been crea
 modify the COMMITTERS file appropriately, which also serves as a test
 of your new username and password.
 
+Becoming a full committer also means you'll become part of the Subversion
+Project Management Committee (PMC).  The PMC is the managing body of the
+Subversion development and user communities.  For more information, see
+<http://www.apache.org/foundation/how-it-works.html#pmc> and
+<http://www.apache.org/dev/pmc.html#faq>.
+
 Please remember to subscribe to the private (PMC) mailing list by
 emailing <private-subscribe{AT}subversion.apache.org>, and to checkout
 a working copy of https://svn.apache.org/repos/private/pmc/subversion/.
+Note: it typically takes 3 to 5 days after you accepted this invitation,
+before access to this protected part of the repository is arranged.  If it
+takes too long, please let us know on the private mailing list.
 
 Remember that you can still post patches for review before committing,
 when you want to.  Commit access just means that you can rely on your

Modified: subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/pmc-member.tmpl
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/pmc-member.tmpl?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/pmc-member.tmpl (original)
+++ subversion/branches/diff-optimizations-bytes/notes/commit-access-templates/pmc-member.tmpl Sun Feb  6 22:19:08 2011
@@ -29,6 +29,9 @@ A temporary password will be chosen for 
 Please remember to subscribe to the private (PMC) mailing list by
 emailing <private-subscribe{AT}subversion.apache.org>, and to checkout
 a working copy of https://svn.apache.org/repos/private/pmc/subversion/.
+Note: it typically takes 3 to 5 days after you accepted this invitation,
+before access to this protected part of the repository is arranged.  If it
+takes too long, please let us know on the private mailing list.
 
 While PMC membership comes with full commit privileges to the Subversion
 repository, we trust you use your judgement in determining what areas

Modified: subversion/branches/diff-optimizations-bytes/notes/variance-adjusted-patching.html
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/notes/variance-adjusted-patching.html?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/notes/variance-adjusted-patching.html (original)
+++ subversion/branches/diff-optimizations-bytes/notes/variance-adjusted-patching.html Sun Feb  6 22:19:08 2011
@@ -670,7 +670,7 @@ in that you could adjust the 'soft-confl
 <p>The message he's referring to appears to be this one:</p>
 
 <pre>
-   <a href="http://subversion.tigris.org/servlets/ReadMsg?list=dev&amp;msgId=162878">http://subversion.tigris.org/servlets/ReadMsg?list=dev&amp;msgId=162878</a>
+   <a href="http://svn.haxx.se/dev/archive-2002-02/1059.shtml">http://svn.haxx.se/dev/archive-2002-02/1059.shtml</a>
    From: William Uther
    To: dev@subversion.tigris.org
    Subject: Re: Merging

Propchange: subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_adler32.h
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Feb  6 22:19:08 2011
@@ -40,4 +40,4 @@
 /subversion/branches/tc_url_rev/subversion/libsvn_diff/diff.h:874351-874483
 /subversion/branches/tree-conflicts/subversion/libsvn_diff/diff.h:868291-873154
 /subversion/branches/tree-conflicts-notify/subversion/libsvn_diff/diff.h:873926-874008
-/subversion/trunk/subversion/include/private/svn_adler32.h:1054278-1064450
+/subversion/trunk/subversion/include/private/svn_adler32.h:1054278-1067783

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_cache.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_cache.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_cache.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_cache.h Sun Feb  6 22:19:08 2011
@@ -68,6 +68,19 @@ typedef svn_error_t *(*svn_cache__deseri
                                                       apr_pool_t *pool);
 
 /**
+ * A function type for deserializing an object @a *out from the string
+ * @a data of length @a data_len in the pool @a pool. The extra information
+ * @a baton passed into can be used to deserialize only a specific part or
+ * sub-structure or to perform any other non-modifying operation that may
+ * not require the whole structure to be processed.
+ */
+typedef svn_error_t *(*svn_cache__partial_getter_func_t)(void **out,
+                                                         const char *data,
+                                                         apr_size_t data_len,
+                                                         void *baton,
+                                                         apr_pool_t *pool);
+
+/**
  * A function type for serializing an object @a in into bytes.  The
  * function should allocate the serialized value in @a pool, set @a
  * *data to the serialized value, and set *data_len to its length.
@@ -93,6 +106,11 @@ typedef svn_error_t *(*svn_cache__error_
 typedef struct svn_memcache_t svn_memcache_t;
 
 /**
+ * An opaque structure representing a membuffer cache object.
+ */
+typedef struct svn_membuffer_t svn_membuffer_t;
+
+/**
  * Opaque type for an in-memory cache.
  */
 typedef struct svn_cache__t svn_cache__t;
@@ -174,6 +192,57 @@ svn_cache__make_memcache_from_config(svn
                                      apr_pool_t *pool);
 
 /**
+ * Creates a new membuffer cache object in @a *cache. It will contain
+ * up to @a total_size bytes of data, using @a directory_size bytes 
+ * for index information and the remainder for serialized objects.
+ *
+ * Since each index entry is about 50 bytes long, 1 to 10 percent of
+ * the @a total_size should be allocated to the @a directory_size,
+ * depending on the average serialized object size. Higher percentages
+ * will generally result in higher hit rates and reduced conflict
+ * resolution overhead.
+ *
+ * If access to the resulting cache object is guranteed to be serialized,
+ * @a thread_safe may be set to @a FALSE for maximum performance.
+ *
+ * Allocations will be made in @a pool, in particular the data buffers.
+ */
+svn_error_t* 
+svn_cache__membuffer_cache_create(svn_membuffer_t **cache,
+                                  apr_size_t total_size,
+                                  apr_size_t directory_size,
+                                  svn_boolean_t thread_safe,
+                                  apr_pool_t *pool);
+
+/**
+ * Creates a new cache in @a *cache_p, storing the data in a potentially
+ * shared @a membuffer object.  The elements in the cache will be indexed
+ * by keys of length @a klen, which may be APR_HASH_KEY_STRING if they
+ * are strings.  Values will be serialized for the memcache using @a
+ * serialize_func and deserialized using @a deserialize_func.  Because
+ * the same memcache object may cache many different kinds of values
+ * form multiple caches, @a prefix should be specified to differentiate 
+ * this cache from other caches.  @a *cache_p will be allocated in @a pool.
+ *
+ * If @a deserialize_func is NULL, then the data is returned as an
+ * svn_string_t; if @a serialize_func is NULL, then the data is
+ * assumed to be an svn_stringbuf_t.
+ *
+ * These caches themselves are thread safe, the shared @a memcache may
+ * be not, depending on its creation parameters.
+ *
+ * These caches do not support svn_cache__iter.
+ */
+svn_error_t *
+svn_cache__create_membuffer_cache(svn_cache__t **cache_p,
+                                  svn_membuffer_t *membuffer,
+                                  svn_cache__serialize_func_t serialize,
+                                  svn_cache__deserialize_func_t deserialize,
+                                  apr_ssize_t klen,
+                                  const char *prefix,
+                                  apr_pool_t *pool);
+
+/**
  * Sets @a handler to be @a cache's error handling routine.  If any
  * error is returned from a call to svn_cache__get or svn_cache__set, @a
  * handler will be called with @a baton and the error, and the

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_eol_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_eol_private.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_eol_private.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_eol_private.h Sun Feb  6 22:19:08 2011
@@ -49,7 +49,7 @@ char *
 svn_eol__find_eol_start(char *buf, apr_size_t len);
 
 /* Return the first eol marker found in [@a buf, @a endp) as a
- * NULL-terminated string, or NULL if no eol marker is found.
+ * NUL-terminated string, or NULL if no eol marker is found.
  *
  * If the last valid character of @a buf is the first byte of a
  * potentially two-byte eol sequence, just return that single-character

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_fs_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_fs_private.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_fs_private.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_fs_private.h Sun Feb  6 22:19:08 2011
@@ -91,6 +91,15 @@ svn_fs__commit_obliteration_txn(svn_revn
                                 apr_pool_t *pool);
 
 
+/* Access the process-global (singleton) membuffer cache. The first call
+ * will automatically allocate the cache using the current cache config.
+ * NULL will be returned if the desired cache size is 0.
+ *
+ * @since New in 1.7.
+ */
+struct svn_membuffer_t *
+svn_fs__get_global_membuffer_cache(void);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_wc_private.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/private/svn_wc_private.h Sun Feb  6 22:19:08 2011
@@ -713,6 +713,42 @@ svn_wc__get_mergeinfo_walk_info(svn_bool
                                 const char *local_abspath,
                                 apr_pool_t *scratch_pool);
 
+/** A callback invoked by svn_wc__prop_list_recursive().
+ * It is equivalent to svn_proplist_receiver_t declared in svn_client.h,
+ * but kept private within the svn_wc__ namespace because it is used within
+ * the bowels of libsvn_wc which don't include svn_client.h.
+ *
+ * @since New in 1.7. */
+typedef svn_error_t *(*svn_wc__proplist_receiver_t)(void *baton,
+                                                    const char *local_abspath,
+                                                    apr_hash_t *props,
+                                                    apr_pool_t *scratch_pool);
+
+/** Call @a receiver_func, passing @a receiver_baton, an absolute path, and
+ * a hash table mapping <tt>char *</tt> names onto <tt>svn_string_t *</tt>
+ * values for all the regular properties of the node at @a local_abspath
+ * and any node beneath @a local_abspath within the specified @a depth.
+ *
+ * If a node has no properties, @a receiver_func is not called for the node.
+ *
+ * Use @a wc_ctx to access the working copy, and @a scratch_pool for
+ * temporary allocations.
+ *
+ * If the node at @a local_abspath does not exist,
+ * #SVN_ERR_WC_PATH_NOT_FOUND is returned.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_wc__prop_list_recursive(svn_wc_context_t *wc_ctx,
+                            const char *local_abspath,
+                            svn_depth_t depth,
+                            svn_wc__proplist_receiver_t receiver_func,
+                            void *receiver_baton,
+                            svn_cancel_func_t cancel_func,
+                            void *cancel_baton,
+                            apr_pool_t *scratch_pool);
+
 
 /**
  * For use by entries.c and entries-dump.c to read old-format working copies.

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/svn_checksum.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/svn_checksum.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/svn_checksum.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/svn_checksum.h Sun Feb  6 22:19:08 2011
@@ -241,6 +241,25 @@ svn_checksum_size(const svn_checksum_t *
 
 
 /**
+ * Return an error of type #SVN_ERR_CHECKSUM_MISMATCH if @a actual and 
+ * @a expected checksums do not match, otherwise, return #SVN_NO_ERROR.
+ * Use @a fmt, and the following parameters to populate the error message.
+ *
+ * @a scratch_pool is used for temporary allocations; the returned error
+ * will be allocated in its own pool (as is typical).
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_checksum_mismatch_err(const svn_checksum_t *expected,
+                          const svn_checksum_t *actual,
+                          apr_pool_t *scratch_pool,
+                          const char *fmt,
+                          ...)
+  __attribute__ ((format(printf, 4, 5)));
+
+
+/**
  * Internal function for creating a checksum from a binary digest.
  *
  * @since New in 1.6

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/svn_dirent_uri.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/svn_dirent_uri.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/svn_dirent_uri.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/svn_dirent_uri.h Sun Feb  6 22:19:08 2011
@@ -40,9 +40,6 @@
  *       "svn+ssh://user@host:123/My%20Stuff/file.doc"
  *    But not:
  *       "file", "dir/file", "A:/dir", "/My%20Stuff/file.doc"
- *    ### Currently the uri implementation still allows relative URIs
- *    ### (carrying both relative and absolute path data) as valid
- *    ### uris, but this will change soon.
  *
  *  - a relative path (relpath) is an unrooted path that can be joined
  *    to any other relative path, uri or dirent. A relative path is
@@ -71,31 +68,62 @@
  *    - @c svn_uri_canonicalize()
  *    - @c svn_uri_is_canonical()
  *
- * The Subversion codebase also recognizes another class of path.  A
- * Subversion filesystem path (fspath) -- otherwise known as a path
- * within a repository -- is a path relative to the root of the
- * repository filesystem, that starts with a slash ("/").  The rules
- * for a fspath are the same as for a relpath except for the leading
- * '/'.  A fspath never ends with '/' except when the whole path is
- * just '/'.  The fspath API is private (see private/svn_fspath.h).
- *
- * Code that works with a path-in-repository should use, in order of
- * preference: a relpath (preferred), or a fspath (widely used by legacy
- * code), or a relative URI (not recommended except in the context of
- * splitting or joining to a full URL).
+ * The Subversion codebase also recognizes some other classes of path:
  *
- * All code that works with local files, MUST USE the dirent apis.
+ *  - A Subversion filesystem path (fspath) -- otherwise known as a
+ *    path within a repository -- is a path relative to the root of
+ *    the repository filesystem, that starts with a slash ("/").  The
+ *    rules for a fspath are the same as for a relpath except for the
+ *    leading '/'.  A fspath never ends with '/' except when the whole
+ *    path is just '/'.  The fspath API is private (see
+ *    private/svn_fspath.h).
+ *
+ *  - A URL path (urlpath) is just the path part of a URL (the part
+ *    that follows the schema, username, hostname, and port).  These
+ *    are also like relpaths, except that they have a leading slash
+ *    (like fspaths) and are URI-encoded.  The urlpath API is also
+ *    private (see private/svn_fspath.h)
+ *    Example:
+ *       "/svn/repos/trunk/README",
+ *       "/svn/repos/!svn/bc/45/file%20with%20spaces.txt"
+ *
+ * So, which path API is appropriate for your use-case?
+ *
+ *  - If your path refers to a local file, directory, symlink, etc. of
+ *    the sort that you can examine and operate on with other software
+ *    on your computer, it's a dirent.
+ *
+ *  - If your path is a full URL -- with a schema, hostname (maybe),
+ *    and path portion -- it's a uri.
+ *
+ *  - If your path is relative, and is somewhat ambiguous unless it's
+ *    joined to some other more explicit (possible absolute) base
+ *    (such as a dirent or URL), it's a relpath.
+ *
+ *  - If your path is the virtual path of a versioned object inside a
+ *    Subversion repository, it could be one of two different types of
+ *    paths.  We'd prefer to use relpaths (relative to the root
+ *    directory of the virtual repository filesystem) for that stuff,
+ *    but some legacy code uses fspaths.  You'll need to figure out if
+ *    your code expects repository paths to have a leading '/' or not.
+ *    If so, they are fspaths; otherwise they are relpaths.
+ *
+ *  - If your path refers only to the path part of URL -- as if
+ *    someone hacked off the initial schema and hostname portion --
+ *    it's a urlpath.  To date, the ra_dav modules are the only ones
+ *    within Subversion that make use of urlpaths, and this is because
+ *    WebDAV makes heavy use of that form of path specification.
  *
  * When translating between local paths (dirents) and uris code should
- * always go via the relative path format.
- * E.g.
- *  - by truncating a parent portion from a path with svn_*_skip_ancestor(),
- *  - or by converting portions to basenames and then joining to existing paths.
- *
- * SECURITY WARNING: If a path that is received from an untrusted source -like
- * from the network- is converted to a dirent it should be tested with
- * svn_dirent_is_under_root() before you can assume the path to be a safe local
- * path.
+ * always go via the relative path format, perhaps by truncating a
+ * parent portion from a path with svn_*_skip_ancestor(), or by
+ * converting portions to basenames and then joining to existing
+ * paths.
+ *
+ * SECURITY WARNING: If a path that is received from an untrusted
+ * source -- such as from the network -- is converted to a dirent it
+ * should be tested with svn_dirent_is_under_root() before you can
+ * assume the path to be a safe local path.
  */
 
 #ifndef SVN_DIRENT_URI_H
@@ -729,9 +757,9 @@ svn_uri_condense_targets(const char **pc
                          apr_pool_t *result_pool,
                          apr_pool_t *scratch_pool);
 
-/** Check that when @a path is joined to @a base_path, the resulting path
- * is still under BASE_PATH in the local filesystem. If not, set @a under_root
- * to @c FALSE. If @a under_root is @c TRUE is returned, and @a result_path is
+/** Check that when @a path is joined to @a base_path, the resulting path is
+ * still under @a base_path in the local filesystem. If not, set @a under_root
+ * to @c FALSE. If @a under_root of @c TRUE is returned, and @a result_path is
  * not @c NULL, then @a *result_path will be set to the absolute path of @a
  * path, allocated in @a result_pool.
  *

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/svn_error.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/svn_error.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/svn_error.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/svn_error.h Sun Feb  6 22:19:08 2011
@@ -254,6 +254,8 @@ svn_handle_error(svn_error_t *error,
  * stdio stream @a stream, prefixed by @a prefix.  Allocations are
  * performed in the error's pool.
  *
+ * @a error may not be @c NULL.
+ *
  * @since New in 1.2.
  */
 void

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/svn_fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/svn_fs.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/svn_fs.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/svn_fs.h Sun Feb  6 22:19:08 2011
@@ -2270,8 +2270,52 @@ svn_fs_pack(const char *db_path,
             apr_pool_t *pool);
 
 
+/** @defgroup svn_fs_cach_config Filesystem caching configuration
+ * @{
+ * @since New in 1.7. */
+
+/* FSFS cache settings. It controls what caches, in what size and
+   how they will be created. The settings apply for the whole process.
+ */
+typedef struct svn_fs_cache_config_t
+{
+  /* total cache size in bytes. May be 0, resulting in no cache being used */
+  apr_uint64_t cache_size;
+
+  /* maximum number of files kept open */
+  apr_size_t file_handle_count;
+
+  /* shall fulltexts be cached? */
+  svn_boolean_t cache_fulltexts;
+
+  /* shall text deltas be cached? */
+  svn_boolean_t cache_txdeltas;
+
+  /* is this a guaranteed single-threaded application? */
+  svn_boolean_t single_threaded;
+} svn_fs_cache_config_t;
+
+/* Get the current FSFS cache configuration. If it has not been set,
+   this function will return the default settings.
+ */
+const svn_fs_cache_config_t *
+svn_fs_get_cache_config(void);
+
+/* Set the FSFS cache configuration. Please note that it may not change
+   the actual configuration *in use*. Therefore, call it before reading
+   data from any FSFS repo and call it only once.
+
+   This function is not thread-safe. Therefore, it should be called once
+   from the processes' initialization code only.
+ */
+void
+svn_fs_set_cache_config(const svn_fs_cache_config_t *settings);
+
 /** @} */
 
+/** @} */
+
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/diff-optimizations-bytes/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/include/svn_repos.h?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/include/svn_repos.h (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/include/svn_repos.h Sun Feb  6 22:19:08 2011
@@ -1221,6 +1221,9 @@ svn_repos_replay(svn_fs_root_t *root,
  * for cleaning them up (either by committing them, or aborting them).
  *
  * @since New in 1.5.
+ *
+ * @note Yes, @a repos_url is a <em>decoded</em> URL.  We realize
+ * that's sorta wonky.  Sorry about that.
  */
 svn_error_t *
 svn_repos_get_commit_editor5(const svn_delta_editor_t **editor,

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/add.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/add.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/add.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/add.c Sun Feb  6 22:19:08 2011
@@ -773,8 +773,8 @@ mkdir_urls(const apr_array_header_t *url
       if (resplit)
         {
           const char *bname;
+
           svn_uri_split(&common, &bname, common, pool);
-          bname = svn_path_uri_encode(bname, pool);
           for (i = 0; i < targets->nelts; i++)
             {
               const char *path = APR_ARRAY_IDX(targets, i, const char *);

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/commit_util.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/commit_util.c Sun Feb  6 22:19:08 2011
@@ -206,8 +206,8 @@ add_lock_token(const char *local_abspath
 {
   struct add_lock_token_baton *altb = walk_baton;
   apr_pool_t *token_pool = apr_hash_pool_get(altb->lock_tokens);
-  const char* lock_token;
-  const char* url;
+  const char *lock_token;
+  const char *url;
 
   /* I want every lock-token I can get my dirty hands on!
      If this entry is switched, so what.  We will send an irrelevant lock
@@ -746,15 +746,11 @@ harvest_committables(apr_hash_t *committ
                                   state_flags,
                                   result_pool, scratch_pool));
           if (state_flags & SVN_CLIENT_COMMIT_ITEM_LOCK_TOKEN)
-            {
-              const char *url = svn_path_url_add_component2(
-                                  repos_root_url,
-                                  repos_relpath, scratch_pool);
-
-              apr_hash_set(lock_tokens,
-                         apr_pstrdup(apr_hash_pool_get(lock_tokens), url),
+            apr_hash_set(lock_tokens,
+                         svn_path_url_add_component2(
+                             repos_root_url, repos_relpath,
+                             apr_hash_pool_get(lock_tokens)),
                          APR_HASH_KEY_STRING, entry_lock_token);
-            }
         }
     }
 

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/export.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/export.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/export.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/export.c Sun Feb  6 22:19:08 2011
@@ -881,11 +881,13 @@ change_dir_prop(void *dir_baton,
 /* Move the tmpfile to file, and send feedback. */
 static svn_error_t *
 close_file(void *file_baton,
-           const char *text_checksum,
+           const char *text_digest,
            apr_pool_t *pool)
 {
   struct file_baton *fb = file_baton;
   struct edit_baton *eb = fb->edit_baton;
+  svn_checksum_t *text_checksum;
+  svn_checksum_t *actual_checksum;
 
   /* Was a txdelta even sent? */
   if (! fb->tmppath)
@@ -893,23 +895,14 @@ close_file(void *file_baton,
 
   SVN_ERR(svn_stream_close(fb->tmp_stream));
 
-  if (text_checksum)
-    {
-      const char *actual_checksum =
-        svn_checksum_to_cstring(svn_checksum__from_digest(fb->text_digest,
-                                                          svn_checksum_md5,
-                                                          pool), pool);
-
-      if (actual_checksum && (strcmp(text_checksum, actual_checksum) != 0))
-        {
-          return svn_error_createf(SVN_ERR_CHECKSUM_MISMATCH, NULL,
-                          _("Checksum mismatch for '%s':\n"
-                            "   expected:  %s\n"
-                            "     actual:  %s\n"),
-                          svn_dirent_local_style(fb->path, pool),
-                          text_checksum, actual_checksum);
-        }
-    }
+  SVN_ERR(svn_checksum_parse_hex(&text_checksum, svn_checksum_md5, text_digest,
+                                 pool));
+  actual_checksum = svn_checksum__from_digest(fb->text_digest,
+                                              svn_checksum_md5, pool);
+
+  SVN_ERR(svn_checksum_mismatch_err(text_checksum, actual_checksum, pool,
+                                    _("Checksum mismatch for '%s'"),
+                                    svn_dirent_local_style(fb->path, pool)));
 
   if ((! fb->eol_style_val) && (! fb->keywords_val) && (! fb->special))
     {

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/externals.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/externals.c Sun Feb  6 22:19:08 2011
@@ -1256,7 +1256,7 @@ svn_client__handle_externals(apr_hash_t 
 
   SVN_ERR_ASSERT(svn_dirent_is_absolute(to_abspath));
 
-  /* Sanity check; see r30124. */
+  /* Sanity check; see r870198. */
   if (! svn_path_is_url(from_url))
     return svn_error_createf
       (SVN_ERR_BAD_URL, NULL, _("'%s' is not a URL"), from_url);

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/list.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/list.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/list.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/list.c Sun Feb  6 22:19:08 2011
@@ -242,8 +242,8 @@ svn_client_list2(const char *path_or_url
 
   if (! dirent)
     return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
-                             _("URL '%s' non-existent in that revision"),
-                             url);
+                             _("URL '%s' non-existent in revision %ld"),
+                             url, rev);
 
   /* Maybe get all locks under url. */
   if (fetch_locks)

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/log.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/log.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/log.c Sun Feb  6 22:19:08 2011
@@ -527,13 +527,13 @@ svn_client_log5(const apr_array_header_t
    * the named range.  This led to revisions being printed in strange
    * order or being printed more than once.  This is issue 1550.
    *
-   * In r11599, jpieper blocked multiple wc targets in svn/log-cmd.c,
+   * In r851673, jpieper blocked multiple wc targets in svn/log-cmd.c,
    * meaning this block not only doesn't work right in that case, but isn't
    * even testable that way (svn has no unit test suite; we can only test
    * via the svn command).  So, that check is now moved into this function
    * (see above).
    *
-   * kfogel ponders future enhancements in r4186:
+   * kfogel ponders future enhancements in r844260:
    * I think that's okay behavior, since the sense of the command is
    * that one wants a particular range of logs for *this* file, then
    * another range for *that* file, and so on.  But we should

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/mergeinfo.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/mergeinfo.c Sun Feb  6 22:19:08 2011
@@ -1271,7 +1271,7 @@ find_nearest_ancestor(const apr_array_he
         {
           svn_sort__item_t item = APR_ARRAY_IDX(depth_first_catalog_index, i,
                                                 svn_sort__item_t);
-          if (svn_path_is_ancestor(item.key, abs_repos_path)
+          if (svn_fspath__is_ancestor(item.key, abs_repos_path)
               || svn_path_compare_paths(item.key, abs_repos_path) == 0)
             ancestor_index = i;
         }

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/prop_commands.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/prop_commands.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/prop_commands.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/prop_commands.c Sun Feb  6 22:19:08 2011
@@ -1217,6 +1217,49 @@ proplist_walk_cb(const char *local_abspa
                        scratch_pool);
 }
 
+/* Baton for recursive_proplist_receiver(). */
+struct recursive_proplist_receiver_baton
+{
+  apr_hash_t *changelist_hash; /* Keys are changelists to filter on. */
+  svn_wc_context_t *wc_ctx;  /* Working copy context. */
+  svn_proplist_receiver_t wrapped_receiver;  /* Proplist receiver to call. */
+  void *wrapped_receiver_baton;    /* Baton for the proplist receiver. */
+
+  /* Anchor, anchor_abspath pair for converting to relative paths */
+  const char *anchor;
+  const char *anchor_abspath;
+};
+
+/* An implementation of svn_wc__proplist_receiver_t. */
+static svn_error_t *
+recursive_proplist_receiver(void *baton,
+                            const char *local_abspath,
+                            apr_hash_t *props,
+                            apr_pool_t *scratch_pool)
+{
+  struct recursive_proplist_receiver_baton *b = baton;
+  const char *path;
+
+  /* If the node doesn't pass changelist filtering, get outta here. */
+  if (! svn_wc__changelist_match(b->wc_ctx, local_abspath,
+                                 b->changelist_hash, scratch_pool))
+    return SVN_NO_ERROR;
+
+  /* Attempt to convert absolute paths to relative paths for
+   * presentation purposes, if needed. */
+  if (b->anchor && b->anchor_abspath)
+    {
+      path = svn_dirent_join(b->anchor,
+                             svn_dirent_skip_ancestor(b->anchor_abspath,
+                                                      local_abspath),
+                             scratch_pool);
+    }
+  else
+    path = local_abspath;
+
+  return svn_error_return(b->wrapped_receiver(b->wrapped_receiver_baton,
+                                              path, props, scratch_pool));
+}
 
 /* Note: this implementation is very similar to svn_client_propget3(). */
 svn_error_t *
@@ -1274,10 +1317,37 @@ svn_client_proplist3(const char *path_or
                                            changelists, pool));
 
       /* Fetch, recursively or not. */
-      if (depth >= svn_depth_files && (kind == svn_node_dir))
+      if (kind == svn_node_dir)
         {
           struct proplist_walk_baton wb;
 
+          if (! pristine)
+            {
+              struct recursive_proplist_receiver_baton rb;
+
+              rb.wc_ctx = ctx->wc_ctx;
+              rb.changelist_hash = changelist_hash;
+              rb.wrapped_receiver = receiver;
+              rb.wrapped_receiver_baton = receiver_baton;
+
+              if (strcmp(path_or_url, local_abspath) != 0)
+                {
+                  rb.anchor = path_or_url;
+                  rb.anchor_abspath = local_abspath;
+                }
+              else
+                {
+                  rb.anchor = NULL;
+                  rb.anchor_abspath = NULL;
+                }
+
+              return svn_error_return(svn_wc__prop_list_recursive(
+                                        ctx->wc_ctx, local_abspath, depth,
+                                        recursive_proplist_receiver, &rb,
+                                        ctx->cancel_func, ctx->cancel_baton,
+                                        pool));
+            }
+
           wb.wc_ctx = ctx->wc_ctx;
           wb.pristine = pristine;
           wb.changelist_hash = changelist_hash;

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/repos_diff.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/repos_diff.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/repos_diff.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_client/repos_diff.c Sun Feb  6 22:19:08 2011
@@ -419,7 +419,7 @@ get_empty_file(struct edit_baton *eb,
                const char **empty_file_path)
 {
   /* Create the file if it does not exist */
-  /* Note that we tried to use /dev/null in r17220, but
+  /* Note that we tried to use /dev/null in r857294, but
      that won't work on Windows: it's impossible to stat NUL */
   if (!eb->empty_file)
     SVN_ERR(svn_io_open_unique_file3(NULL, &(eb->empty_file), NULL,

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_delta/compose_delta.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_delta/compose_delta.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_delta/compose_delta.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_delta/compose_delta.c Sun Feb  6 22:19:08 2011
@@ -703,7 +703,7 @@ copy_source_ops(apr_size_t offset, apr_s
 
               /* ### FIXME: ptn_overlap is unsigned, so the if() condition
                  below is always true!  Either it should be '> 0', or the
-                 code block should be unconditional.  See also r2288. */
+                 code block should be unconditional.  See also r842362. */
               if (ptn_overlap >= 0)
                 {
                   /* Issue second subrange in the pattern. */

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff4.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff4.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff4.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_diff/diff4.c Sun Feb  6 22:19:08 2011
@@ -36,7 +36,7 @@
 /*
  * Variance adjustment rules:
  *
- * http://subversion.tigris.org/variance-adjusted-patching.html
+ * See notes/variance-adjusted-patching.html
  *
  * ###: Expand this comment to contain the full set of adjustment
  * ###: rules instead of pointing to a webpage.

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_fs_fs/caching.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_fs_fs/caching.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_fs_fs/caching.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_fs_fs/caching.c Sun Feb  6 22:19:08 2011
@@ -300,12 +300,27 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
                                          apr_pstrcat(pool, prefix, "TEXT",
                                                      (char *)NULL),
                                          fs->pool));
-      if (! no_handler)
-        SVN_ERR(svn_cache__set_error_handler(ffd->fulltext_cache,
-                                             warn_on_cache_errors, fs, pool));
+    }
+  else if (svn_fs__get_global_membuffer_cache() && 
+           svn_fs_get_cache_config()->cache_fulltexts)
+    {
+      SVN_ERR(svn_cache__create_membuffer_cache(&(ffd->fulltext_cache),
+                                                svn_fs__get_global_membuffer_cache(),
+                                                /* Values are svn_string_t */
+                                                NULL, NULL,
+                                                APR_HASH_KEY_STRING,
+                                                apr_pstrcat(pool, prefix, "TEXT",
+                                                            NULL),
+                                                fs->pool));
     }
   else
-    ffd->fulltext_cache = NULL;
+    {
+      ffd->fulltext_cache = NULL;
+    }
+
+  if (ffd->fulltext_cache && ! no_handler)
+    SVN_ERR(svn_cache__set_error_handler(ffd->fulltext_cache,
+            warn_on_cache_errors, fs, pool));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra/compat.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra/compat.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra/compat.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra/compat.c Sun Feb  6 22:19:08 2011
@@ -161,8 +161,8 @@ prev_log_path(const char **prev_path_p,
                     *action_p = change->action;
                   if (copyfrom_rev_p)
                     *copyfrom_rev_p = change->copyfrom_rev;
-                  prev_path = svn_path_join(change->copyfrom_path,
-                                            path + len + 1, pool);
+                  prev_path = svn_fspath__join(change->copyfrom_path,
+                                               path + len + 1, pool);
                   break;
                 }
             }
@@ -188,6 +188,26 @@ prev_log_path(const char **prev_path_p,
 }
 
 
+/* Set *FS_PATH_P to the absolute filesystem path associated with the
+   URL built from SESSION's URL and REL_PATH (which is relative to
+   session's URL.  Use POOL for allocations. */
+static svn_error_t *
+get_fs_path(const char **fs_path_p,
+            svn_ra_session_t *session,
+            const char *rel_path,
+            apr_pool_t *pool)
+{
+  const char *url, *fs_path;
+
+  SVN_ERR(svn_ra_get_session_url(session, &url, pool));
+  SVN_ERR(svn_ra_get_path_relative_to_root(session, &fs_path, url, pool));
+  *fs_path_p = svn_fspath__canonicalize(svn_relpath_join(fs_path,
+                                                         rel_path, pool),
+                                        pool);
+  return SVN_NO_ERROR;
+}
+
+
 
 /*** Fallback implementation of svn_ra_get_locations(). ***/
 
@@ -293,20 +313,17 @@ svn_ra__locations_from_log(svn_ra_sessio
   apr_array_header_t *targets;
   svn_revnum_t youngest_requested, oldest_requested, youngest, oldest;
   svn_node_kind_t kind;
-  const char *root_url, *url, *rel_path;
-
-  /* Fetch the repository root URL and relative path. */
-  SVN_ERR(svn_ra_get_repos_root2(session, &root_url, pool));
-  SVN_ERR(svn_ra_get_session_url(session, &url, pool));
-  url = svn_path_join(url, path, pool);
-  rel_path = svn_path_uri_decode(url + strlen(root_url), pool);
+  const char *fs_path;
 
+  /* Fetch the absolute FS path associated with PATH. */
+  SVN_ERR(get_fs_path(&fs_path, session, path, pool));
+  
   /* Sanity check: verify that the peg-object exists in repos. */
   SVN_ERR(svn_ra_check_path(session, path, peg_revision, &kind, pool));
   if (kind == svn_node_none)
     return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
                              _("Path '%s' doesn't exist in revision %ld"),
-                             rel_path, peg_revision);
+                             fs_path, peg_revision);
 
   /* Easy out: no location revisions. */
   if (! location_revisions->nelts)
@@ -333,7 +350,7 @@ svn_ra__locations_from_log(svn_ra_sessio
 
   /* Populate most of our log receiver baton structure. */
   lrb.kind = kind;
-  lrb.last_path = rel_path;
+  lrb.last_path = fs_path;
   lrb.location_revisions = apr_array_copy(pool, location_revisions);
   lrb.peg_revision = peg_revision;
   lrb.peg_path = NULL;
@@ -352,7 +369,7 @@ svn_ra__locations_from_log(svn_ra_sessio
 
   /* If the received log information did not cover any of the
      requested revisions, use the last known path.  (This normally
-     just means that ABS_PATH was not modified between the requested
+     just means that FS_PATH was not modified between the requested
      revision and OLDEST.  If the file was created at some point after
      OLDEST, then lrb.last_path should be NULL.) */
   if (! lrb.peg_path)
@@ -375,15 +392,15 @@ svn_ra__locations_from_log(svn_ra_sessio
     return svn_error_createf
       (APR_EGENERAL, NULL,
        _("Unable to find repository location for '%s' in revision %ld"),
-       rel_path, peg_revision);
+       fs_path, peg_revision);
 
   /* Sanity check: make sure that our calculated peg path is the same
      as what we expected it to be. */
-  if (strcmp(rel_path, lrb.peg_path) != 0)
+  if (strcmp(fs_path, lrb.peg_path) != 0)
     return svn_error_createf
       (SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
        _("'%s' in revision %ld is an unrelated object"),
-       rel_path, youngest);
+       fs_path, youngest);
 
   *locations_p = locations;
   return SVN_NO_ERROR;
@@ -517,13 +534,10 @@ svn_ra__location_segments_from_log(svn_r
   apr_array_header_t *targets;
   svn_node_kind_t kind;
   svn_revnum_t youngest_rev = SVN_INVALID_REVNUM;
-  const char *root_url, *url, *rel_path;
+  const char *fs_path;
 
-  /* Fetch the repository root URL and relative path. */
-  SVN_ERR(svn_ra_get_repos_root2(session, &root_url, pool));
-  SVN_ERR(svn_ra_get_session_url(session, &url, pool));
-  url = svn_path_join(url, path, pool);
-  rel_path = svn_path_uri_decode(url + strlen(root_url), pool);
+  /* Fetch the absolute FS path associated with PATH. */
+  SVN_ERR(get_fs_path(&fs_path, session, path, pool));
 
   /* If PEG_REVISION is invalid, it means HEAD.  If START_REV is
      invalid, it means HEAD.  If END_REV is SVN_INVALID_REVNUM, we'll
@@ -553,11 +567,11 @@ svn_ra__location_segments_from_log(svn_r
   if (kind == svn_node_none)
     return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL,
                              _("Path '%s' doesn't exist in revision %ld"),
-                             rel_path, start_rev);
+                             fs_path, start_rev);
 
   /* Populate most of our log receiver baton structure. */
   lrb.kind = kind;
-  lrb.last_path = rel_path;
+  lrb.last_path = fs_path;
   lrb.done = FALSE;
   lrb.start_rev = start_rev;
   lrb.range_end = start_rev;
@@ -653,10 +667,7 @@ svn_ra__file_revs_from_log(svn_ra_sessio
                            apr_pool_t *pool)
 {
   svn_node_kind_t kind;
-  const char *repos_url;
-  const char *session_url;
-  const char *tmp;
-  char *repos_abs_path;
+  const char *repos_url, *session_url, *fs_path;
   apr_array_header_t *condensed_targets;
   struct fr_log_message_baton lmb;
   struct rev *rev;
@@ -664,21 +675,19 @@ svn_ra__file_revs_from_log(svn_ra_sessio
   svn_stream_t *last_stream;
   apr_pool_t *currpool, *lastpool;
 
+  /* Fetch the absolute FS path associated with PATH. */
+  SVN_ERR(get_fs_path(&fs_path, ra_session, path, pool));
+
   /* Check to make sure we're dealing with a file. */
   SVN_ERR(svn_ra_check_path(ra_session, path, end, &kind, pool));
-
   if (kind == svn_node_dir)
     return svn_error_createf(SVN_ERR_FS_NOT_FILE, NULL,
-                             _("'%s' is not a file"), path);
-
-  SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_url, pool));
-  SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, pool));
+                             _("'%s' is not a file"), fs_path);
 
   condensed_targets = apr_array_make(pool, 1, sizeof(const char *));
   APR_ARRAY_PUSH(condensed_targets, const char *) = path;
 
-  lmb.path = svn_fspath__canonicalize(svn_uri_is_child(repos_url, session_url,
-                                                       pool), pool);
+  lmb.path = fs_path;
   lmb.eldest = NULL;
   lmb.pool = pool;
 
@@ -693,6 +702,8 @@ svn_ra__file_revs_from_log(svn_ra_sessio
                           pool));
 
   /* Reparent the session while we go back through the history. */
+  SVN_ERR(svn_ra_get_session_url(ra_session, &session_url, pool));
+  SVN_ERR(svn_ra_get_repos_root2(ra_session, &repos_url, pool));
   SVN_ERR(svn_ra_reparent(ra_session, repos_url, pool));
 
   currpool = svn_pool_create(pool);
@@ -830,10 +841,11 @@ svn_ra__get_deleted_rev_from_log(svn_ra_
                                  svn_revnum_t *revision_deleted,
                                  apr_pool_t *pool)
 {
-  const char *session_url, *source_root_url, *rel_path_url, *abs_del_path;
+  const char *fs_path;
   log_path_del_rev_t log_path_deleted_baton;
 
-  SVN_ERR_ASSERT(*rel_deleted_path != '/');
+  /* Fetch the absolute FS path associated with PATH. */
+  SVN_ERR(get_fs_path(&fs_path, session, rel_deleted_path, pool));
 
   if (!SVN_IS_VALID_REVNUM(peg_revision))
     return svn_error_createf(SVN_ERR_CLIENT_BAD_REVISION, NULL,
@@ -845,12 +857,7 @@ svn_ra__get_deleted_rev_from_log(svn_ra_
     return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
                             _("Peg revision must precede end revision"));
 
-  SVN_ERR(svn_ra_get_session_url(session, &session_url, pool));
-  SVN_ERR(svn_ra_get_repos_root2(session, &source_root_url, pool));
-  rel_path_url = svn_path_url_add_component2(session_url, rel_deleted_path,
-                                             pool);
-  abs_del_path = svn_path_uri_decode(rel_path_url + strlen(source_root_url), pool);
-  log_path_deleted_baton.path = abs_del_path;
+  log_path_deleted_baton.path = fs_path;
   log_path_deleted_baton.revision_deleted = SVN_INVALID_REVNUM;
 
   /* Examine the logs of SESSION's URL to find when DELETED_PATH was first

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_local/ra_plugin.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_local/ra_plugin.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_local/ra_plugin.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_local/ra_plugin.c Sun Feb  6 22:19:08 2011
@@ -368,7 +368,7 @@ deltify_etc(const svn_commit_info_t *com
           svn_pool_clear(iterpool);
           apr_hash_this(hi, &rel_path, NULL, &val);
           token = val;
-          abs_path = svn_dirent_join(db->fs_path, rel_path, iterpool);
+          abs_path = svn_fspath__join(db->fs_path, rel_path, iterpool);
           /* We may get errors here if the lock was broken or stolen
              after the commit succeeded.  This is fine and should be
              ignored. */
@@ -547,7 +547,7 @@ svn_ra_local__get_file_revs(svn_ra_sessi
                             apr_pool_t *pool)
 {
   svn_ra_local__session_baton_t *sess = session->priv;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
   return svn_repos_get_file_revs2(sess->repos, abs_path, start, end,
                                   include_merged_revisions, NULL, NULL,
                                   handler, handler_baton, pool);
@@ -665,14 +665,14 @@ svn_ra_local__get_commit_editor(svn_ra_s
                hi = apr_hash_next(hi))
             {
               void *val;
-              const char *path, *token;
+              const char *abs_path, *token;
               const void *key;
 
               apr_hash_this(hi, &key, NULL, &val);
-              path = svn_dirent_join(sess->fs_path->data, (const char *)key,
-                                     pool);
+              abs_path = svn_fspath__join(sess->fs_path->data, key, pool);
               token = val;
-              SVN_ERR(svn_fs_access_add_lock_token2(fs_access, path, token));
+              SVN_ERR(svn_fs_access_add_lock_token2(fs_access,
+                                                    abs_path, token));
             }
         }
     }
@@ -710,7 +710,7 @@ svn_ra_local__get_mergeinfo(svn_ra_sessi
     {
       const char *relative_path = APR_ARRAY_IDX(paths, i, const char *);
       APR_ARRAY_PUSH(abs_paths, const char *) =
-        svn_dirent_join(sess->fs_path->data, relative_path, pool);
+        svn_fspath__join(sess->fs_path->data, relative_path, pool);
     }
 
   SVN_ERR(svn_repos_fs_get_mergeinfo2(&tmp_catalog, sess->repos, abs_paths,
@@ -891,7 +891,7 @@ svn_ra_local__get_log(svn_ra_session_t *
         {
           const char *relative_path = APR_ARRAY_IDX(paths, i, const char *);
           APR_ARRAY_PUSH(abs_paths, const char *) =
-            svn_dirent_join(sess->fs_path->data, relative_path, pool);
+            svn_fspath__join(sess->fs_path->data, relative_path, pool);
         }
     }
 
@@ -949,7 +949,7 @@ svn_ra_local__stat(svn_ra_session_t *ses
 {
   svn_ra_local__session_baton_t *sess = session->priv;
   svn_fs_root_t *root;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
 
   if (! SVN_IS_VALID_REVNUM(revision))
     SVN_ERR(svn_fs_youngest_rev(&revision, sess->fs, pool));
@@ -1017,7 +1017,7 @@ svn_ra_local__get_file(svn_ra_session_t 
   svn_stream_t *contents;
   svn_revnum_t youngest_rev;
   svn_ra_local__session_baton_t *sess = session->priv;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
 
   /* Open the revision's root. */
   if (! SVN_IS_VALID_REVNUM(revision))
@@ -1080,7 +1080,7 @@ svn_ra_local__get_dir(svn_ra_session_t *
   apr_hash_index_t *hi;
   svn_ra_local__session_baton_t *sess = session->priv;
   apr_pool_t *subpool;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
 
   /* Open the revision's root. */
   if (! SVN_IS_VALID_REVNUM(revision))
@@ -1182,7 +1182,7 @@ svn_ra_local__get_locations(svn_ra_sessi
                             apr_pool_t *pool)
 {
   svn_ra_local__session_baton_t *sess = session->priv;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
   return svn_repos_trace_node_locations(sess->fs, locations, abs_path,
                                         peg_revision, location_revisions,
                                         NULL, NULL, pool);
@@ -1200,7 +1200,7 @@ svn_ra_local__get_location_segments(svn_
                                     apr_pool_t *pool)
 {
   svn_ra_local__session_baton_t *sess = session->priv;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
   return svn_repos_node_location_segments(sess->repos, abs_path,
                                           peg_revision, start_rev, end_rev,
                                           receiver, receiver_baton,
@@ -1239,7 +1239,7 @@ svn_ra_local__lock(svn_ra_session_t *ses
       path = key;
       revnum = val;
 
-      abs_path = svn_dirent_join(sess->fs_path->data, path, iterpool);
+      abs_path = svn_fspath__join(sess->fs_path->data, path, iterpool);
 
       /* This wrapper will call pre- and post-lock hooks. */
       err = svn_repos_fs_lock(&lock, sess->repos, abs_path, NULL, comment,
@@ -1299,7 +1299,7 @@ svn_ra_local__unlock(svn_ra_session_t *s
       else
         token = NULL;
 
-      abs_path = svn_dirent_join(sess->fs_path->data, path, iterpool);
+      abs_path = svn_fspath__join(sess->fs_path->data, path, iterpool);
 
       /* This wrapper will call pre- and post-unlock hooks. */
       err = svn_repos_fs_unlock(sess->repos, abs_path, token, force,
@@ -1331,7 +1331,7 @@ svn_ra_local__get_lock(svn_ra_session_t 
                        apr_pool_t *pool)
 {
   svn_ra_local__session_baton_t *sess = session->priv;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
   return svn_fs_get_lock(lock, sess->fs, abs_path, pool);
 }
 
@@ -1345,7 +1345,7 @@ svn_ra_local__get_locks(svn_ra_session_t
                         apr_pool_t *pool)
 {
   svn_ra_local__session_baton_t *sess = session->priv;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
 
   /* Kinda silly to call the repos wrapper, since we have no authz
      func to give it.  But heck, why not. */
@@ -1432,7 +1432,7 @@ svn_ra_local__get_deleted_rev(svn_ra_ses
                               apr_pool_t *pool)
 {
   svn_ra_local__session_baton_t *sess = session->priv;
-  const char *abs_path = svn_dirent_join(sess->fs_path->data, path, pool);
+  const char *abs_path = svn_fspath__join(sess->fs_path->data, path, pool);
 
   SVN_ERR(svn_repos_deleted_rev(sess->fs,
                                 abs_path,
@@ -1452,15 +1452,15 @@ svn_ra_local__obliterate_path_rev(svn_ra
                                   apr_pool_t *pool)
 {
   svn_ra_local__session_baton_t *sess = session->priv;
+  const char *abs_path  = svn_fspath__join(sess->fs_path->data, path, pool);
 
   /* A username is absolutely required to obliterate anything. */
   SVN_ERR(get_username(session, pool));
 
-  path = svn_path_join(sess->fs_path->data, path, pool);
   SVN_ERR(svn_repos__obliterate_path_rev(sess->repos,
                                          sess->username,
                                          revision,
-                                         path,
+                                         abs_path,
                                          pool));
 
   return SVN_NO_ERROR;

Modified: subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/commit.c?rev=1067787&r1=1067786&r2=1067787&view=diff
==============================================================================
--- subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/commit.c (original)
+++ subversion/branches/diff-optimizations-bytes/subversion/libsvn_ra_neon/commit.c Sun Feb  6 22:19:08 2011
@@ -371,7 +371,7 @@ static svn_error_t * add_child(version_r
   rsrc->revision = revision;
   rsrc->name = name;
   rsrc->url = svn_path_url_add_component2(parent->url, name, pool);
-  rsrc->local_path = svn_path_join(parent->local_path, name, pool);
+  rsrc->local_path = svn_relpath_join(parent->local_path, name, pool);
 
   /* Case 1:  the resource is truly "new".  Either it was added as a
      completely new object, or implicitly created via a COPY.  Either
@@ -501,7 +501,7 @@ static svn_error_t * checkout_resource(c
         return svn_error_createf
           (err->apr_err, err,
            _("File or directory '%s' is out of date; try updating"),
-           svn_path_local_style(rsrc->local_path, pool));
+           svn_relpath_local_style(rsrc->local_path, pool));
       return err;
     }
 
@@ -682,7 +682,7 @@ static apr_hash_t *get_child_tokens(apr_
       svn_pool_clear(subpool);
       apr_hash_this(hi, &key, &klen, &val);
 
-      if (svn_path_is_child(dir, key, subpool))
+      if (svn_relpath_is_child(dir, key, subpool))
         apr_hash_set(tokens, key, klen, val);
     }