You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2012/03/15 22:40:17 UTC

svn commit: r1301216 [1/4] - in /subversion/branches/inheritable-props: ./ notes/ notes/directory-index/ subversion/bindings/javahl/ subversion/bindings/swig/ruby/test/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversio...

Author: pburba
Date: Thu Mar 15 21:40:15 2012
New Revision: 1301216

URL: http://svn.apache.org/viewvc?rev=1301216&view=rev
Log:
On the inheritable-props branch: Sync with ^/subversion/trunk through
r1301213.

Added:
    subversion/branches/inheritable-props/notes/directory-index/
      - copied from r1301213, subversion/trunk/notes/directory-index/
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/daemonize.py
      - copied unchanged from r1301213, subversion/trunk/tools/server-side/svnpubsub/daemonize.py
Removed:
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnwcsub.tac
Modified:
    subversion/branches/inheritable-props/   (props changed)
    subversion/branches/inheritable-props/CHANGES
    subversion/branches/inheritable-props/COMMITTERS
    subversion/branches/inheritable-props/notes/moves
    subversion/branches/inheritable-props/notes/subversion-design.html
    subversion/branches/inheritable-props/subversion/bindings/javahl/README
    subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/test_repos.rb
    subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/util.rb
    subversion/branches/inheritable-props/subversion/include/private/svn_client_private.h
    subversion/branches/inheritable-props/subversion/include/private/svn_mergeinfo_private.h
    subversion/branches/inheritable-props/subversion/include/private/svn_mutex.h
    subversion/branches/inheritable-props/subversion/include/private/svn_wc_private.h
    subversion/branches/inheritable-props/subversion/include/svn_repos.h
    subversion/branches/inheritable-props/subversion/libsvn_client/commit_util.c
    subversion/branches/inheritable-props/subversion/libsvn_client/copy.c
    subversion/branches/inheritable-props/subversion/libsvn_client/externals.c
    subversion/branches/inheritable-props/subversion/libsvn_client/merge.c
    subversion/branches/inheritable-props/subversion/libsvn_client/mergeinfo.c
    subversion/branches/inheritable-props/subversion/libsvn_client/ra.c
    subversion/branches/inheritable-props/subversion/libsvn_client/util.c
    subversion/branches/inheritable-props/subversion/libsvn_fs_fs/caching.c
    subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs.h
    subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs_fs.c
    subversion/branches/inheritable-props/subversion/libsvn_fs_fs/rep-cache-db.sql
    subversion/branches/inheritable-props/subversion/libsvn_repos/log.c
    subversion/branches/inheritable-props/subversion/libsvn_subr/mergeinfo.c
    subversion/branches/inheritable-props/subversion/libsvn_wc/adm_crawler.c
    subversion/branches/inheritable-props/subversion/libsvn_wc/status.c
    subversion/branches/inheritable-props/subversion/libsvn_wc/wc-metadata.sql
    subversion/branches/inheritable-props/subversion/libsvn_wc/wc-queries.sql
    subversion/branches/inheritable-props/subversion/libsvn_wc/wc_db.c
    subversion/branches/inheritable-props/subversion/mod_dav_svn/version.c
    subversion/branches/inheritable-props/subversion/svn/log-cmd.c
    subversion/branches/inheritable-props/subversion/tests/cmdline/authz_tests.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/checkout_tests.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/depth_tests.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tests.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svnsync_tests.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/factory.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/main.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/sandbox.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/tree.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/verify.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/wc.py
    subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py
    subversion/branches/inheritable-props/subversion/tests/libsvn_client/client-test.c
    subversion/branches/inheritable-props/subversion/tests/libsvn_wc/db-test.c
    subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c
    subversion/branches/inheritable-props/tools/dev/merge-graph.py
    subversion/branches/inheritable-props/tools/dev/mergegraph/mergegraph.py
    subversion/branches/inheritable-props/tools/dist/release.py
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/README.txt
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/rc.d/svnwcsub
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/rc.d/svnwcsub.debian
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/rc.d/svnwcsub.solaris
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py
    subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnwcsub.py

Propchange: subversion/branches/inheritable-props/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Mar 15 21:40:15 2012
@@ -37,6 +37,7 @@
 /subversion/branches/kwallet:870785-871314
 /subversion/branches/log-g-performance:870941-871032
 /subversion/branches/merge-skips-obstructions:874525-874615
+/subversion/branches/multi-layer-moves:1239019-1300930
 /subversion/branches/nfc-nfd-aware-client:870276,870376
 /subversion/branches/performance:979193,980118,981087,981090,981189,981194,981287,981684,981827,982043,982355,983398,983406,983430,983474,983488,983490,983760,983764,983766,983770,984927,984973,984984,985014,985037,985046,985472,985477,985482,985487-985488,985493,985497,985500,985514,985601,985603,985606,985669,985673,985695,985697,986453,986465,986485,986491-986492,986517,986521,986605,986608,986817,986832,987865,987868-987869,987872,987886-987888,987893,988319,988898,990330,990533,990535-990537,990541,990568,990572,990574-990575,990600,990759,992899,992904,992911,993127,993141,994956,995478,995507,995603,998012,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,1029054-1029055,1029062-1029063,1029078,1029080,1029090,1029092-1029093,1029111,1029151,1029158,1029229-1029230,1029232,1029335-1029336,1029339-1029340,10
 29342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
 /subversion/branches/py-tests-as-modules:956579-1033052
@@ -57,3 +58,4 @@
 /subversion/branches/tree-conflicts:868291-873154
 /subversion/branches/tree-conflicts-notify:873926-874008
 /subversion/branches/uris-as-urls:1060426-1064427
+/subversion/trunk:1297080-1301213

Modified: subversion/branches/inheritable-props/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/CHANGES?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/CHANGES (original)
+++ subversion/branches/inheritable-props/CHANGES Thu Mar 15 21:40:15 2012
@@ -384,6 +384,25 @@ the 1.6 release:  http://subversion.apac
     * fix type mapping of svn_txdelta_window_t in python bindings (issue #3688)
 
 
+Version 1.6.18
+(?? Mar 2012, from /branches/1.6.x)
+http://svn.apache.org/repos/asf/subversion/tags/1.6.18
+
+  User-visible changes:
+    * reject invalid svn:mergeinfo at commit time over DAV (issue #3953) 
+    * fix reintegrate merge regression introduced in 1.6.13 (issue #3957)
+    * make the stderr output of the post-commit hook XML-safe (r893478)
+    * fix a rare source of FSFS corruption (r1240752)
+    * plug a memory leak in the bdb backend (r1205726)
+    * server-side performance fix for "log -g" (r1152282)
+    * fix description of svndumpfilter's --targets option (r1151911)
+
+  Developer-visible changes:
+    * fix sqlite distfile retrieval in get-deps.sh (r1134734)
+    * fix swig-py memory leak (r1235264, -296, -302, -736)
+    * allow passing --with-jdk to gen-make.py on Windows (r966167)
+
+
 Version 1.6.17
 (01 Jun 2011, from /branches/1.6.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.6.17

Modified: subversion/branches/inheritable-props/COMMITTERS
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/COMMITTERS?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/COMMITTERS [UTF-8] (original)
+++ subversion/branches/inheritable-props/COMMITTERS [UTF-8] Thu Mar 15 21:40:15 2012
@@ -57,6 +57,7 @@ Blanket commit access:
         dannas   Daniel Näslund <da...@dannas.name>
        stefan2   Stefan Fuhrmann <st...@alice-dsl.de>
        jcorvel   Johan Corveleyn <jc...@gmail.com>
+         trent   Trent Nelson <tr...@snakebite.org>
 
 [[END ACTIVE FULL COMMITTERS.  LEAVE THIS LINE HERE; SCRIPTS LOOK FOR IT.]]
 

Modified: subversion/branches/inheritable-props/notes/moves
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/notes/moves?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/notes/moves (original)
+++ subversion/branches/inheritable-props/notes/moves Thu Mar 15 21:40:15 2012
@@ -39,29 +39,22 @@ The following columns in the NODES table
 moves from copies:
 
   /* Boolean value, specifying if this node was moved here (rather than just
-     copied). The source of the move is implied by a different node with
-     a moved_to column pointing at this node. */
+     copied). This is set on all the nodes in the moved tree.  The source of
+     the move is implied by a different node with a moved_to column pointing
+     at the root node of the moved tree. */
   moved_here  INTEGER,
 
   /* If the underlying node was moved away (rather than just deleted), this
-     specifies the local_relpath of where the BASE node was moved to.
+     specifies the local_relpath of where the node was moved to.
      This is set only on the root of a move, and is NULL for all children.
 
-     Note that moved_to never refers to *this* node. It always refers
-     to the "underlying" node in the BASE tree. A non-NULL moved_to column
-     is only valid in rows where op_depth == 0. */
+     The op-depth of the moved-to node is not recorded. A moved_to path
+     always points at a node within the highest op-depth layer at the
+     destination. This invariant must be maintained by operations which
+     change existing move information. */
   moved_to  TEXT,
 
-Some new queries were added which use these columns:
-
-  STMT_SELECT_MOVED_FROM_RELPATH
-  STMT_UPDATE_MOVED_TO_RELPATH
-  STMT_CLEAR_MOVED_TO_RELPATH
-  STMT_CLEAR_MOVED_TO_RELPATH_RECURSIVE
-  STMT_SELECT_MOVED_HERE_CHILDREN
-
-More queries might be needed (TBD).
-
+Many queries were added or changed to use these columns.
 
 == libsvn_wc ==
 
@@ -81,6 +74,8 @@ private libsvn_wc API:
       the node at the moved_from abspath
 
 More API changes might be needed (TBD).
+In particular, scan_deletion may need to return a list of moves
+in the multi-layer case (http://wiki.apache.org/subversion/MultiLayerMoves)
 
 We might require a working copy upgrade when going from 1.7 to 1.8,
 and only allow new move functionality to be used with 1.8 working copies.

Modified: subversion/branches/inheritable-props/notes/subversion-design.html
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/notes/subversion-design.html?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/notes/subversion-design.html (original)
+++ subversion/branches/inheritable-props/notes/subversion-design.html Thu Mar 15 21:40:15 2012
@@ -2340,7 +2340,10 @@ write/Makefile:6
       <p>Once you've done this, read Jim Blandy's own structural overview,
         which explains how nodes and revisions are organized (among other
         things) in the filesystem implementation:
-        <tt class="filename">subversion/libsvn_fs_base/notes/structure</tt>.</p>
+        <tt class="filename">subversion/libsvn_fs_base/notes/structure</tt>.
+        (Some details in that document are specific to the BDB-based
+        filesystem implementation.  Details specific to FSFS are recorded in
+        <tt class="filename">subversion/libsvn_fs_fs/structure</tt>.)</p>
 
       <p>Finally, read the well-documented API in
         <tt class="filename">subversion/include/svn_fs.h</tt>.</p>

Modified: subversion/branches/inheritable-props/subversion/bindings/javahl/README
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/bindings/javahl/README?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/bindings/javahl/README (original)
+++ subversion/branches/inheritable-props/subversion/bindings/javahl/README Thu Mar 15 21:40:15 2012
@@ -5,7 +5,7 @@ JavaHL provides a (mostly native, using 
 a high level Java API for Subversion, which was originally targeted for
 implementors of GUI clients and IDE plug-ins for Subversion.  JavaHL
 currently provides a minimal-but-complete set of APIs which expose the
-core Subversion C API to Java.  It requires a JRE 1.2+ (runtime).
+core Subversion C API to Java.  It requires a JRE 1.5+ (runtime).
 
 It is currently quite mature, and can be considered for production use.
 
@@ -14,7 +14,7 @@ Build system
 ------------
 
 JavaHL should compile and run under Linux, Win32, and Mac OS X with a
-JDK 1.3+.
+JDK 1.5+.
 
 Its build will produce both a native library (libsvnjavahl-1.so on Unix
 or libsvnjavahl-1.dll on Win32) and a platform independent archive of
@@ -62,9 +62,6 @@ Success stories
 
 Subclipse, Eclipse IDE plug-in <http://subclipse.tigris.org/>
 
-Svn-Up, Swing GUI and plug-in for the IDEA IDE
-<http://svnup.tigris.org/>
-
 
 Why not 100% pure Java?
 -----------------------

Modified: subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/test_repos.rb
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/test_repos.rb?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/test_repos.rb (original)
+++ subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/test_repos.rb Thu Mar 15 21:40:15 2012
@@ -94,7 +94,7 @@ class SvnReposTest < Test::Unit::TestCas
   end
 
   def test_create
-    tmp_repos_path = File.join(@tmp_path, "repos")
+    tmp_repos_path = File.join(@tmp_path, "repos2")
     fs_type = Svn::Fs::TYPE_FSFS
     fs_config = {Svn::Fs::CONFIG_FS_TYPE => fs_type}
     repos = nil

Modified: subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/util.rb
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/util.rb?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/util.rb (original)
+++ subversion/branches/inheritable-props/subversion/bindings/swig/ruby/test/util.rb Thu Mar 15 21:40:15 2012
@@ -37,15 +37,17 @@ module SvnTestUtil
     @author = ENV["USER"] || "sample-user"
     @password = "sample-password"
     @realm = "sample realm"
-    @repos_path = "repos"
-    @full_repos_path = File.expand_path(@repos_path)
-    @repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
+
     @svnserve_host = "127.0.0.1"
     @svnserve_ports = (64152..64282).collect{|x| x.to_s}
-    @wc_base_dir = Dir.mktmpdir
-    @wc_path = File.join(@wc_base_dir, "wc")
+
+    @tmp_path = Dir.mktmpdir
+    @wc_path = File.join(@tmp_path, "wc")
     @full_wc_path = File.expand_path(@wc_path)
-    @tmp_path = "tmp"
+    @repos_path = File.join(@tmp_path, "repos")
+    @full_repos_path = File.expand_path(@repos_path)
+    @repos_uri = "file://#{@full_repos_path.sub(/^\/?/, '/')}"
+
     @config_path = "config"
     @greek = Greek.new(@tmp_path, @wc_path, @repos_uri)
   end
@@ -140,7 +142,7 @@ module SvnTestUtil
   end
 
   def teardown_wc
-    remove_recursively_with_retry(@wc_base_dir)
+    remove_recursively_with_retry(@wc_path)
   end
 
   def setup_config

Modified: subversion/branches/inheritable-props/subversion/include/private/svn_client_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/include/private/svn_client_private.h?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/include/private/svn_client_private.h (original)
+++ subversion/branches/inheritable-props/subversion/include/private/svn_client_private.h Thu Mar 15 21:40:15 2012
@@ -82,6 +82,24 @@ svn_client__youngest_common_ancestor(con
                                      apr_pool_t *result_pool,
                                      apr_pool_t *scratch_pool);
 
+/* Set *REPOS_ROOT_URL_P, *REPOS_UUID_P, *REV and *URL to the origin of the
+ * WC node at WC_ABSPATH.  If the node is a local copy, give the copy-from
+ * location.  If the node is locally added or deleted, set *REV and *URL
+ * to SVN_INVALID_REVNUM and NULL respectively, but still give the correct
+ * repository root URL and UUID.
+ *
+ * Any outputs may be NULL if not wanted.
+ */
+svn_error_t *
+svn_client__wc_node_get_origin(const char **repos_root_url_p,
+                               const char **repos_uuid_p,
+                               svn_revnum_t *rev_p,
+                               const char **url_p,
+                               const char *wc_abspath,
+                               svn_client_ctx_t *ctx,
+                               apr_pool_t *result_pool,
+                               apr_pool_t *scratch_pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */

Modified: subversion/branches/inheritable-props/subversion/include/private/svn_mergeinfo_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/include/private/svn_mergeinfo_private.h?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/include/private/svn_mergeinfo_private.h (original)
+++ subversion/branches/inheritable-props/subversion/include/private/svn_mergeinfo_private.h Thu Mar 15 21:40:15 2012
@@ -99,9 +99,10 @@ svn_mergeinfo__remove_empty_rangelists(s
 
 /* Make a shallow (ie, mergeinfos are not duped, or altered at all;
    keys share storage) copy of IN_CATALOG in *OUT_CATALOG, removing
-   PREFIX_PATH (which is an absolute path) from the beginning of each
-   key in the catalog (each of which is also an absolute path).  It is
-   illegal for any key to not start with PREFIX_PATH.  The new hash
+   PREFIX_PATH from the beginning of each key in the catalog.
+   PREFIX_PATH and the keys of IN_CATALOG are absolute 'fspaths',
+   starting with '/'.  It is illegal for any key to not start with
+   PREFIX_PATH.  The keys of *OUT_CATALOG are relpaths.  The new hash
    and temporary values are allocated in POOL.  (This is useful for
    making the return value from svn_ra_get_mergeinfo relative to the
    session root, say.) */

Modified: subversion/branches/inheritable-props/subversion/include/private/svn_mutex.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/include/private/svn_mutex.h?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/include/private/svn_mutex.h (original)
+++ subversion/branches/inheritable-props/subversion/include/private/svn_mutex.h Thu Mar 15 21:40:15 2012
@@ -103,13 +103,11 @@ svn_mutex__unlock(svn_mutex__t *mutex,
  * @note Prefer using this macro instead of explicit lock aquisition and
  * release.
  */
-#define SVN_MUTEX__WITH_LOCK(mutex, expr) \
-do {                                      \
-  svn_mutex__t *m = (mutex);              \
-  svn_error_t *e = svn_mutex__lock(m);    \
-  if (e) return svn_error_trace(e);       \
-  e = svn_mutex__unlock(m, (expr));       \
-  if (e) return svn_error_trace(e);       \
+#define SVN_MUTEX__WITH_LOCK(mutex, expr)               \
+do {                                                    \
+  svn_mutex__t *svn_mutex__m = (mutex);                 \
+  SVN_ERR(svn_mutex__lock(svn_mutex__m));               \
+  SVN_ERR(svn_mutex__unlock(svn_mutex__m, (expr)));     \
 } while (0)
 
 #ifdef __cplusplus

Modified: subversion/branches/inheritable-props/subversion/include/private/svn_wc_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/include/private/svn_wc_private.h?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/include/private/svn_wc_private.h (original)
+++ subversion/branches/inheritable-props/subversion/include/private/svn_wc_private.h Thu Mar 15 21:40:15 2012
@@ -477,8 +477,9 @@ svn_wc__node_get_url(const char **url,
 
 /**
  * Retrieves the origin of the node as it is known in the repository. For
- * added nodes this retrieves where the node is copied from, and the repository
- * location for other nodes.
+ * a copied node this retrieves where the node is copied from, for an added
+ * node this returns NULL/INVALID outputs, and for any other node this
+ * retrieves the repository location.
  *
  * All output arguments may be NULL.
  *
@@ -837,7 +838,7 @@ svn_wc__call_with_write_lock(svn_wc__wit
     SVN_ERR(svn_wc__acquire_write_lock(&svn_wc__lock_root_abspath, wc_ctx,    \
                                        local_abspath, lock_anchor,            \
                                        scratch_pool, scratch_pool));          \
-    svn_wc__err1 = svn_error_trace(expr);                                     \
+    svn_wc__err1 = (expr);                                                    \
     svn_wc__err2 = svn_wc__release_write_lock(                                \
                      wc_ctx, svn_wc__lock_root_abspath, scratch_pool);        \
     SVN_ERR(svn_error_compose_create(svn_wc__err1, svn_wc__err2));            \

Modified: subversion/branches/inheritable-props/subversion/include/svn_repos.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/include/svn_repos.h?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/include/svn_repos.h (original)
+++ subversion/branches/inheritable-props/subversion/include/svn_repos.h Thu Mar 15 21:40:15 2012
@@ -1780,6 +1780,8 @@ svn_repos_get_logs(svn_repos_t *repos,
  * set @a *catalog to a catalog of this mergeinfo.  @a *catalog will
  * never be @c NULL but may be empty.
  *
+ * The paths in @a paths, and the keys of @a catalog, start with '/'.
+ *
  * @a inherit indicates whether explicit, explicit or inherited, or
  * only inherited mergeinfo for @a paths is fetched.
  *

Modified: subversion/branches/inheritable-props/subversion/libsvn_client/commit_util.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/commit_util.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_client/commit_util.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_client/commit_util.c Thu Mar 15 21:40:15 2012
@@ -44,6 +44,7 @@
 
 #include "svn_private_config.h"
 #include "private/svn_wc_private.h"
+#include "private/svn_client_private.h"
 
 /*** Uncomment this to turn on commit driver debugging. ***/
 /*
@@ -426,8 +427,7 @@ bail_on_tree_conflicted_ancestor(svn_wc_
    Any items added to COMMITTABLES are allocated from the COMITTABLES
    hash pool, not POOL.  SCRATCH_POOL is used for temporary allocations. */
 static svn_error_t *
-harvest_committables(svn_wc_context_t *wc_ctx,
-                     const char *local_abspath,
+harvest_committables(const char *local_abspath,
                      svn_client__committables_t *committables,
                      apr_hash_t *lock_tokens,
                      const char *repos_root_url,
@@ -446,9 +446,11 @@ harvest_committables(svn_wc_context_t *w
                      void *cancel_baton,
                      svn_wc_notify_func2_t notify_func,
                      void *notify_baton,
+                     svn_client_ctx_t *ctx,
                      apr_pool_t *result_pool,
                      apr_pool_t *scratch_pool)
 {
+  svn_wc_context_t *wc_ctx = ctx->wc_ctx;
   svn_boolean_t text_mod = FALSE;
   svn_boolean_t prop_mod = FALSE;
   apr_byte_t state_flags = 0;
@@ -627,26 +629,21 @@ harvest_committables(svn_wc_context_t *w
       if (check_url_func)
         {
           svn_revnum_t revision;
-          const char *repos_relpath;
+          const char *repos_url;
           svn_node_kind_t kind;
 
           /* Determine from what parent we would be the deleted child */
-          SVN_ERR(svn_wc__node_get_origin(NULL, &revision, &repos_relpath,
-                                          NULL, NULL, NULL, wc_ctx,
-                                          svn_dirent_dirname(local_abspath,
-                                                             scratch_pool),
-                                          FALSE, scratch_pool, scratch_pool));
+          SVN_ERR(svn_client__wc_node_get_origin(
+                    NULL, NULL, &revision, &repos_url,
+                    svn_dirent_dirname(local_abspath, scratch_pool),
+                    ctx, scratch_pool, scratch_pool));
+
+          repos_url = svn_path_url_add_component2(
+                        repos_url, svn_dirent_basename(local_abspath, NULL),
+                        scratch_pool);
 
-          repos_relpath = svn_relpath_join(repos_relpath,
-                                           svn_dirent_basename(local_abspath,
-                                                               NULL),
-                                           scratch_pool);
-
-          SVN_ERR(check_url_func(check_url_baton, &kind,
-                                 svn_path_url_add_component2(repos_root_url,
-                                                             repos_relpath,
-                                                             scratch_pool),
-                                 revision, scratch_pool));
+          SVN_ERR(check_url_func(check_url_baton, &kind, repos_url, revision,
+                                 scratch_pool));
 
           if (kind == svn_node_none)
             return SVN_NO_ERROR; /* This node can't be deleted */
@@ -896,7 +893,7 @@ harvest_committables(svn_wc_context_t *w
             this_commit_relpath = svn_relpath_join(commit_relpath, name,
                                                    iterpool);
 
-          SVN_ERR(harvest_committables(wc_ctx, this_abspath,
+          SVN_ERR(harvest_committables(this_abspath,
                                        committables, lock_tokens,
                                        repos_root_url,
                                        this_commit_relpath,
@@ -911,8 +908,7 @@ harvest_committables(svn_wc_context_t *w
                                        check_url_func, check_url_baton,
                                        cancel_func, cancel_baton,
                                        notify_func, notify_baton,
-                                       result_pool,
-                                       iterpool));
+                                       ctx, result_pool, iterpool));
         }
 
       svn_pool_destroy(iterpool);
@@ -1154,7 +1150,7 @@ svn_client__harvest_committables(svn_cli
                                                ctx->notify_baton2,
                                                iterpool));
 
-      SVN_ERR(harvest_committables(ctx->wc_ctx, target_abspath,
+      SVN_ERR(harvest_committables(target_abspath,
                                    *committables, *lock_tokens,
                                    repos_root_url,
                                    NULL /* COMMIT_RELPATH */,
@@ -1166,7 +1162,7 @@ svn_client__harvest_committables(svn_cli
                                    check_url_func, check_url_baton,
                                    ctx->cancel_func, ctx->cancel_baton,
                                    ctx->notify_func2, ctx->notify_baton2,
-                                   result_pool, iterpool));
+                                   ctx, result_pool, iterpool));
     }
 
   hdb.wc_ctx = ctx->wc_ctx;
@@ -1246,8 +1242,7 @@ harvest_copy_committables(void *baton, v
                                          pair->dst_abspath_or_url, pool);
 
   /* Handle this SRC. */
-  SVN_ERR(harvest_committables(btn->ctx->wc_ctx,
-                               pair->src_abspath_or_url,
+  SVN_ERR(harvest_committables(pair->src_abspath_or_url,
                                btn->committables, NULL,
                                repos_root_url,
                                commit_relpath,
@@ -1264,7 +1259,7 @@ harvest_copy_committables(void *baton, v
                                btn->ctx->cancel_baton,
                                btn->ctx->notify_func2,
                                btn->ctx->notify_baton2,
-                               btn->result_pool, pool));
+                               btn->ctx, btn->result_pool, pool));
 
   hdb.wc_ctx = btn->ctx->wc_ctx;
   hdb.cancel_func = btn->ctx->cancel_func;

Modified: subversion/branches/inheritable-props/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/copy.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_client/copy.c Thu Mar 15 21:40:15 2012
@@ -46,6 +46,7 @@
 #include "private/svn_wc_private.h"
 #include "private/svn_ra_private.h"
 #include "private/svn_mergeinfo_private.h"
+#include "private/svn_client_private.h"
 
 
 /*
@@ -92,23 +93,14 @@ calculate_target_mergeinfo(svn_ra_sessio
      bother checking. */
   if (local_abspath)
     {
-      const char *repos_root_url;
-      const char *repos_relpath;
-
       SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
 
-      SVN_ERR(svn_wc__node_get_origin(NULL, &src_revnum,
-                                      &repos_relpath, &repos_root_url,
-                                      NULL, NULL,
-                                      ctx->wc_ctx, local_abspath, FALSE,
-                                      pool, pool));
+      SVN_ERR(svn_client__wc_node_get_origin(NULL, NULL,
+                                             &src_revnum, &src_url,
+                                             local_abspath, ctx,
+                                             pool, pool));
 
-      if (repos_relpath)
-        {
-          src_url = svn_path_url_add_component2(repos_root_url, repos_relpath,
-                                                pool);
-        }
-      else
+      if (! src_url)
         locally_added = TRUE;
     }
 

Modified: subversion/branches/inheritable-props/subversion/libsvn_client/externals.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/externals.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_client/externals.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_client/externals.c Thu Mar 15 21:40:15 2012
@@ -138,6 +138,8 @@ switch_dir_external(const char *local_ab
   svn_revnum_t external_peg_rev = SVN_INVALID_REVNUM;
   svn_revnum_t external_rev = SVN_INVALID_REVNUM;
   apr_pool_t *subpool = svn_pool_create(pool);
+  const char *repos_root_url;
+  const char *repos_uuid;
 
   SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
 
@@ -168,9 +170,6 @@ switch_dir_external(const char *local_ab
 
       if (node_url)
         {
-          const char *repos_root_url;
-          const char *repos_uuid;
-
           /* If we have what appears to be a version controlled
              subdir, and its top-level URL matches that of our
              externals definition, perform an update. */
@@ -183,7 +182,7 @@ switch_dir_external(const char *local_ab
                                                   timestamp_sleep,
                                                   ctx, subpool));
               svn_pool_destroy(subpool);
-              return SVN_NO_ERROR;
+              goto cleanup;
             }
 
           SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url, &repos_uuid,
@@ -243,7 +242,7 @@ switch_dir_external(const char *local_ab
                                                 subpool));
 
               svn_pool_destroy(subpool);
-              return SVN_NO_ERROR;
+              goto cleanup;
             }
         }
     }
@@ -281,28 +280,25 @@ switch_dir_external(const char *local_ab
                                         FALSE, FALSE, timestamp_sleep,
                                         ctx, pool));
 
-  {
-    const char *repos_root_url;
-    const char *repos_uuid;
+  SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url,
+                                      &repos_uuid,
+                                      ctx->wc_ctx, local_abspath,
+                                      pool, pool));
+
+  SVN_ERR(svn_wc__external_register(ctx->wc_ctx,
+                                    defining_abspath,
+                                    local_abspath, svn_node_dir,
+                                    repos_root_url, repos_uuid,
+                                    svn_uri_skip_ancestor(repos_root_url,
+                                                          url, pool),
+                                    external_peg_rev,
+                                    external_rev,
+                                    pool));
 
-    SVN_ERR(svn_wc__node_get_repos_info(&repos_root_url,
-                                        &repos_uuid,
-                                        ctx->wc_ctx, local_abspath,
-                                        pool, pool));
-
-    SVN_ERR(svn_wc__external_register(ctx->wc_ctx,
-                                      defining_abspath,
-                                      local_abspath, svn_node_dir,
-                                      repos_root_url, repos_uuid,
-                                      svn_uri_skip_ancestor(repos_root_url,
-                                                            url, pool),
-                                      external_peg_rev,
-                                      external_rev,
-                                      pool));
-    /* Issue #4123: We don't need to keep the newly checked out external's
-       DB open. */
-    SVN_ERR(svn_wc__close_db(local_abspath, ctx->wc_ctx, pool));
-  }
+ cleanup:
+  /* Issues #4123 and #4130: We don't need to keep the newly checked
+     out external's DB open. */
+  SVN_ERR(svn_wc__close_db(local_abspath, ctx->wc_ctx, pool));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/inheritable-props/subversion/libsvn_client/merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/merge.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_client/merge.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_client/merge.c Thu Mar 15 21:40:15 2012
@@ -58,6 +58,7 @@
 #include "private/svn_mergeinfo_private.h"
 #include "private/svn_fspath.h"
 #include "private/svn_ra_private.h"
+#include "private/svn_client_private.h"
 
 #include "svn_private_config.h"
 
@@ -189,7 +190,7 @@ typedef struct merge_target_t
   /* URL of the node, or NULL if node is locally added */
   const char *url;
 
-  /* Revision of the node, or NULL if node is locally added */
+  /* Revision of the node, or SVN_INVALID_REVNUM if node is locally added */
   svn_revnum_t rev;
 
   /* Repository root URL and UUID, even if node is locally added */
@@ -3476,8 +3477,8 @@ fix_deleted_subtree_ranges(const merge_s
    is older than START, then the base revision is used as the younger
    bound in place of START.
 
-   RA_SESSION is an open RA session to the repository in which SOURCE lives.
-   It may be temporarily reparented as needed by this function.
+   RA_SESSION is an RA session open to the repository in which TARGET_ABSPATH
+   lives.  It may be temporarily reparented as needed by this function.
 
    Allocate *RECORDED_MERGEINFO and *IMPLICIT_MERGEINFO in RESULT_POOL.
    Use SCRATCH_POOL for any temporary allocations. */
@@ -3508,9 +3509,8 @@ get_full_mergeinfo(svn_mergeinfo_t *reco
 
   if (implicit_mergeinfo)
     {
-      const char *repos_root;
-      const char *repos_relpath;
       svn_revnum_t target_rev;
+      const char *target_url;
 
       /* Assert that we have sane input. */
       SVN_ERR_ASSERT(SVN_IS_VALID_REVNUM(start) && SVN_IS_VALID_REVNUM(end)
@@ -3518,18 +3518,15 @@ get_full_mergeinfo(svn_mergeinfo_t *reco
 
       /* Retrieve the origin (original_*) of the node, or just the
          url if the node was not copied. */
-      SVN_ERR(svn_wc__node_get_origin(FALSE, &target_rev, &repos_relpath,
-                                      &repos_root, NULL, NULL,
-                                      ctx->wc_ctx, target_abspath, FALSE,
-                                      scratch_pool, scratch_pool));
-
-      if (! repos_relpath)
-        {
-          /* We've been asked to operate on a target which has no location
-           * in the repository. Either it's unversioned (but attempts to
-           * merge into unversioned targets should not get as far as here),
-           * or it is locally added, in which case the target's implicit
-           * mergeinfo is empty. */
+      SVN_ERR(svn_client__wc_node_get_origin(NULL, NULL,
+                                             &target_rev, &target_url,
+                                             target_abspath, ctx,
+                                             scratch_pool, scratch_pool));
+
+      if (! target_url)
+        {
+          /* We've been asked to operate on a locally added target, so its
+           * implicit mergeinfo is empty. */
           *implicit_mergeinfo = apr_hash_make(result_pool);
         }
       else if (target_rev <= end)
@@ -3540,11 +3537,6 @@ get_full_mergeinfo(svn_mergeinfo_t *reco
         }
       else
         {
-          const char *url;
-
-          url = svn_path_url_add_component2(repos_root, repos_relpath,
-                                            scratch_pool);
-
           /* Fetch so-called "implicit mergeinfo" (that is, natural
              history). */
 
@@ -3558,7 +3550,7 @@ get_full_mergeinfo(svn_mergeinfo_t *reco
           /* Fetch the implicit mergeinfo. */
           SVN_ERR(svn_client__get_history_as_mergeinfo(implicit_mergeinfo,
                                                        NULL,
-                                                       url, target_rev,
+                                                       target_url, target_rev,
                                                        start, end,
                                                        ra_session, ctx,
                                                        result_pool));
@@ -3570,7 +3562,7 @@ get_full_mergeinfo(svn_mergeinfo_t *reco
 
 /* Helper for ensure_implicit_mergeinfo().
 
-   PARENT, CHILD, REVISION1, REVISION2, RA_SESSION, and CTX
+   PARENT, CHILD, REVISION1, REVISION2 and CTX
    are all cascaded from the arguments of the same names in
    ensure_implicit_mergeinfo().  PARENT and CHILD must both exist, i.e.
    this function should never be called where CHILD is the merge target.
@@ -3580,6 +3572,9 @@ get_full_mergeinfo(svn_mergeinfo_t *reco
    Set CHILD->IMPLICIT_MERGEINFO to the mergeinfo inherited from
    PARENT->IMPLICIT_MERGEINFO.  CHILD->IMPLICIT_MERGEINFO is allocated
    in RESULT_POOL.
+
+   RA_SESSION is an RA session open to the repository that contains CHILD.
+   It may be temporarily reparented by this function.
    */
 static svn_error_t *
 inherit_implicit_mergeinfo_from_parent(svn_client__merge_path_t *parent,
@@ -3630,7 +3625,10 @@ inherit_implicit_mergeinfo_from_parent(s
    PARENT->IMPLICIT_MERGEINFO, otherwise contact the repository.  Use
    SCRATCH_POOL for all temporary allocations.
 
-   PARENT, CHILD, REVISION1, REVISION2, RA_SESSION, and
+   RA_SESSION is an RA session open to the repository that contains CHILD.
+   It may be temporarily reparented by this function.
+
+   PARENT, CHILD, REVISION1, REVISION2 and
    CTX are all cascaded from the arguments of the same name in
    filter_merged_revisions() and the same conditions for that function
    hold here. */
@@ -9259,31 +9257,15 @@ target_node_location(merge_target_t **ta
                      apr_pool_t *scratch_pool)
 {
   merge_target_t *target = apr_palloc(result_pool, sizeof(*target));
-  const char *relpath;
 
-  target->abspath = wc_abspath;
+  target->abspath = apr_pstrdup(result_pool, wc_abspath);
   SVN_ERR(svn_wc_read_kind(&target->kind, ctx->wc_ctx, wc_abspath, FALSE,
                            scratch_pool));
-  SVN_ERR(svn_wc__node_get_origin(NULL /* is_copy */,
-                                  &target->rev, &relpath,
-                                  &target->repos_root.url,
-                                  &target->repos_root.uuid,
-                                  NULL, ctx->wc_ctx, wc_abspath,
-                                  FALSE /* scan_deleted */,
-                                  result_pool, scratch_pool));
-  if (target->repos_root.url && relpath)
-    {
-      target->url = svn_path_url_add_component2(target->repos_root.url,
-                                                relpath, result_pool);
-    }
-  else
-    {
-      target->url = NULL;
-      SVN_ERR(svn_client_get_repos_root(&target->repos_root.url,
-                                        &target->repos_root.uuid,
-                                        wc_abspath,
-                                        ctx, result_pool, scratch_pool));
-    }
+  SVN_ERR(svn_client__wc_node_get_origin(&target->repos_root.url,
+                                         &target->repos_root.uuid,
+                                         &target->rev, &target->url,
+                                         wc_abspath, ctx,
+                                         result_pool, scratch_pool));
 
   *target_p = target;
   return SVN_NO_ERROR;
@@ -10396,7 +10378,18 @@ calculate_left_hand_side(const char **ur
   return SVN_NO_ERROR;
 }
 
-/* The body of svn_client_find_reintegrate_merge(), which see for details. */
+/* Determine the URLs and revisions needed to perform a reintegrate merge
+ * from SOURCE_PATH_OR_URL at SOURCE_PEG_REVISION into the working
+ * copy at TARGET.
+ *
+ * Set *TARGET_RA_SESSION_P and *SOURCE_RA_SESSION_P to new RA sessions
+ * opened to the target and source branches respectively.  Set *SOURCE_P to
+ * the source-left and source-right locations of the required merge.  Set
+ * *YC_ANCESTOR_REV_P to the revision number of the youngest ancestor.
+ * Any of these output pointers may be NULL if not wanted.
+ *
+ * See svn_client_find_reintegrate_merge() for other details.
+ */
 static svn_error_t *
 find_reintegrate_merge(svn_ra_session_t **target_ra_session_p,
                        svn_ra_session_t **source_ra_session_p,
@@ -10404,7 +10397,7 @@ find_reintegrate_merge(svn_ra_session_t 
                        svn_revnum_t *yc_ancestor_rev_p,
                        const char *source_path_or_url,
                        const svn_opt_revision_t *source_peg_revision,
-                       const char *target_abspath,
+                       const merge_target_t *target,
                        svn_client_ctx_t *ctx,
                        apr_pool_t *result_pool,
                        apr_pool_t *scratch_pool)
@@ -10412,31 +10405,35 @@ find_reintegrate_merge(svn_ra_session_t 
   url_uuid_t source_repos_root;
   svn_ra_session_t *target_ra_session;
   svn_ra_session_t *source_ra_session;
-  const char *source_repos_rel_path, *target_repos_rel_path;
+  const char *source_url, *source_repos_rel_path, *target_repos_rel_path;
   const char *yc_ancestor_relpath;
   svn_revnum_t yc_ancestor_rev;
-  merge_target_t *target;
   merge_source_t source;
   svn_mergeinfo_t unmerged_to_source_mergeinfo_catalog;
   svn_mergeinfo_t merged_to_source_mergeinfo_catalog;
   svn_error_t *err;
   apr_hash_t *subtrees_with_mergeinfo;
 
+  if (! target->url)
+    return svn_error_createf(SVN_ERR_CLIENT_UNRELATED_RESOURCES, NULL,
+                             _("Can't reintegrate into '%s' because it is "
+                               "locally added and therefore not related to "
+                               "the merge source"),
+                             svn_dirent_local_style(target->abspath,
+                                                    scratch_pool));
+
   /* Make sure we're dealing with a real URL. */
-  SVN_ERR(svn_client_url_from_path2(&source.url2, source_path_or_url, ctx,
+  SVN_ERR(svn_client_url_from_path2(&source_url, source_path_or_url, ctx,
                                     scratch_pool, scratch_pool));
-  if (! source.url2)
+  if (! source_url)
     return svn_error_createf(SVN_ERR_ENTRY_MISSING_URL, NULL,
                              _("'%s' has no URL"),
                              svn_dirent_local_style(source_path_or_url,
                                                     scratch_pool));
 
-  SVN_ERR(target_node_location(&target, target_abspath,
-                               ctx, scratch_pool, scratch_pool));
-
   /* Determine the source's repository root URL. */
   SVN_ERR(svn_client_get_repos_root(&source_repos_root.url,
-                                    &source_repos_root.uuid, source.url2,
+                                    &source_repos_root.uuid, source_url,
                                     ctx, scratch_pool, scratch_pool));
 
   /* source_repos_root and target->repos_root are required to be the same,
@@ -10445,12 +10442,13 @@ find_reintegrate_merge(svn_ra_session_t 
                            svn_dirent_local_style(source_path_or_url,
                                                   scratch_pool),
                            &target->repos_root,
-                           svn_dirent_local_style(target_abspath, scratch_pool),
+                           svn_dirent_local_style(target->abspath,
+                                                  scratch_pool),
                            TRUE /* strict_urls */, scratch_pool));
 
   /* A reintegrate merge requires the merge target to reflect a subtree
    * of the repository as found at a single revision. */
-  SVN_ERR(ensure_wc_is_suitable_merge_target(target_abspath, ctx,
+  SVN_ERR(ensure_wc_is_suitable_merge_target(target->abspath, ctx,
                                              FALSE, FALSE, FALSE,
                                              scratch_pool));
 
@@ -10458,12 +10456,12 @@ find_reintegrate_merge(svn_ra_session_t 
      the default revision for the left side of our merge, since that's
      what the repository sub-tree is required to be up to date with
      (with regard to the WC). */
-  source.rev1 = target->rev;
+  /* ### Bogus/obsolete comment? */
 
-  source_repos_rel_path = svn_uri_skip_ancestor(target->repos_root.url, source.url2,
+  source_repos_rel_path = svn_uri_skip_ancestor(target->repos_root.url, source_url,
                                                 scratch_pool);
   SVN_ERR(svn_client__path_relative_to_root(&target_repos_rel_path,
-                                            ctx->wc_ctx, target_abspath,
+                                            ctx->wc_ctx, target->abspath,
                                             NULL, FALSE, NULL,
                                             scratch_pool, scratch_pool));
 
@@ -10476,7 +10474,7 @@ find_reintegrate_merge(svn_ra_session_t 
 
   /* Find all the subtrees in TARGET_WCPATH that have explicit mergeinfo. */
   err = get_wc_explicit_mergeinfo_catalog(&subtrees_with_mergeinfo,
-                                          target_abspath, svn_depth_infinity,
+                                          target->abspath, svn_depth_infinity,
                                           ctx, scratch_pool, scratch_pool);
   /* Issue #3896: If invalid mergeinfo in the reintegrate target
      prevents us from proceeding, then raise the best error possible. */
@@ -10486,21 +10484,21 @@ find_reintegrate_merge(svn_ra_session_t 
 
   /* Open two RA sessions, one to our source and one to our target. */
   SVN_ERR(svn_client__ra_session_from_path(&source_ra_session, &source.rev2, &source.url2,
-                                           source.url2, NULL, source_peg_revision,
+                                           source_url, NULL, source_peg_revision,
                                            source_peg_revision,
                                            ctx, result_pool));
   SVN_ERR(svn_client__open_ra_session_internal(&target_ra_session, NULL,
                                                target->url,
                                                NULL, NULL, FALSE, FALSE,
-                                               ctx, scratch_pool));
+                                               ctx, result_pool));
 
   SVN_ERR(calculate_left_hand_side(&source.url1, &source.rev1,
                                    &merged_to_source_mergeinfo_catalog,
                                    &unmerged_to_source_mergeinfo_catalog,
-                                   target_abspath,
+                                   target->abspath,
                                    target_repos_rel_path,
                                    subtrees_with_mergeinfo,
-                                   source.rev1,
+                                   target->rev,
                                    source_repos_rel_path,
                                    source_repos_root.url,
                                    source.rev2,
@@ -10605,13 +10603,16 @@ svn_client_find_reintegrate_merge(const 
                                   apr_pool_t *scratch_pool)
 {
   const char *target_abspath;
+  merge_target_t *target;
   merge_source_t *source;
 
   SVN_ERR(svn_dirent_get_absolute(&target_abspath, target_wcpath,
                                   scratch_pool));
+  SVN_ERR(target_node_location(&target, target_abspath,
+                               ctx, scratch_pool, scratch_pool));
   SVN_ERR(find_reintegrate_merge(NULL, NULL, &source, NULL,
                                  source_path_or_url, source_peg_revision,
-                                 target_abspath,
+                                 target,
                                  ctx, result_pool, scratch_pool));
   if (source)
     {
@@ -10653,7 +10654,7 @@ merge_reintegrate_locked(const char *sou
   SVN_ERR(find_reintegrate_merge(&target_ra_session, &source_ra_session,
                                  &source, &yc_ancestor_rev,
                                  source_path_or_url, source_peg_revision,
-                                 target_abspath,
+                                 target,
                                  ctx, scratch_pool, scratch_pool));
 
   if (! source)

Modified: subversion/branches/inheritable-props/subversion/libsvn_client/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/mergeinfo.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_client/mergeinfo.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_client/mergeinfo.c Thu Mar 15 21:40:15 2012
@@ -43,6 +43,7 @@
 #include "private/svn_wc_private.h"
 #include "private/svn_ra_private.h"
 #include "private/svn_fspath.h"
+#include "private/svn_client_private.h"
 #include "client.h"
 #include "mergeinfo.h"
 #include "svn_private_config.h"
@@ -1063,20 +1064,13 @@ get_mergeinfo(svn_mergeinfo_catalog_t *m
      contact the repository for the requested PEG_REVISION. */
   if (!use_url)
     {
-      const char *repos_root_url;
-      const char *repos_relpath;
       const char *origin_url = NULL;
       SVN_ERR(svn_dirent_get_absolute(&local_abspath, path_or_url,
                                       scratch_pool));
 
-      SVN_ERR(svn_wc__node_get_origin(NULL, &rev, &repos_relpath,
-                                      &repos_root_url, NULL, NULL,
-                                      ctx->wc_ctx, local_abspath, FALSE,
-                                      scratch_pool, scratch_pool));
-
-      if(repos_relpath)
-        origin_url = svn_path_url_add_component2(repos_root_url, repos_relpath,
-                                                 scratch_pool);
+      SVN_ERR(svn_client__wc_node_get_origin(NULL, NULL, &rev, &origin_url,
+                                             local_abspath, ctx,
+                                             scratch_pool, scratch_pool));
 
       if (!origin_url
           || strcmp(origin_url, url) != 0

Modified: subversion/branches/inheritable-props/subversion/libsvn_client/ra.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/ra.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_client/ra.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_client/ra.c Thu Mar 15 21:40:15 2012
@@ -52,10 +52,6 @@ typedef struct callback_baton_t
      this base directory. */
   const char *base_dir_abspath;
 
-  /* When true, makes sure temporary files are created
-     outside the working copy. */
-  svn_boolean_t read_only_wc;
-
   /* An array of svn_client_commit_item3_t * structures, present only
      during working copy commits. */
   const apr_array_header_t *commit_items;
@@ -63,9 +59,6 @@ typedef struct callback_baton_t
   /* A client context. */
   svn_client_ctx_t *ctx;
 
-  /* The pool to use for session-related items. */
-  apr_pool_t *pool;
-
 } callback_baton_t;
 
 
@@ -293,8 +286,6 @@ svn_client__open_ra_session_internal(svn
   cbtable->get_client_string = get_client_string;
 
   cb->base_dir_abspath = base_dir_abspath;
-  cb->read_only_wc = read_only_wc;
-  cb->pool = pool;
   cb->commit_items = commit_items;
   cb->ctx = ctx;
 

Modified: subversion/branches/inheritable-props/subversion/libsvn_client/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_client/util.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_client/util.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_client/util.c Thu Mar 15 21:40:15 2012
@@ -142,6 +142,50 @@ svn_client__path_relative_to_root(const 
 }
 
 svn_error_t *
+svn_client__wc_node_get_origin(const char **repos_root_url_p,
+                               const char **repos_uuid_p,
+                               svn_revnum_t *rev_p,
+                               const char **url_p,
+                               const char *wc_abspath,
+                               svn_client_ctx_t *ctx,
+                               apr_pool_t *result_pool,
+                               apr_pool_t *scratch_pool)
+{
+  const char *repos_root_url, *relpath;
+
+  SVN_ERR(svn_wc__node_get_origin(NULL /* is_copy */, rev_p, &relpath,
+                                  &repos_root_url, repos_uuid_p,
+                                  NULL, ctx->wc_ctx, wc_abspath,
+                                  FALSE /* scan_deleted */,
+                                  result_pool, scratch_pool));
+  if (repos_root_url && relpath)
+    {
+      *url_p = svn_path_url_add_component2(repos_root_url, relpath,
+                                           result_pool);
+    }
+  else
+    {
+      /* The node has no location in the repository. It's unversioned or
+       * locally added or locally deleted.
+       *
+       * If it's locally added or deleted, find the repository root
+       * URL and UUID anyway, and leave the node URL and revision as NULL
+       * and INVALID.  If it's unversioned, this will throw an error. */
+      *url_p = NULL;
+      SVN_ERR(svn_client_get_repos_root(&repos_root_url, repos_uuid_p,
+                                        wc_abspath,
+                                        ctx, result_pool, scratch_pool));
+    }
+
+  if (repos_root_url_p)
+    *repos_root_url_p = repos_root_url;
+
+  SVN_ERR_ASSERT(!repos_root_url_p || *repos_root_url_p);
+  SVN_ERR_ASSERT(!repos_uuid_p || *repos_uuid_p);
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_client_get_repos_root(const char **repos_root,
                           const char **repos_uuid,
                           const char *abspath_or_url,

Modified: subversion/branches/inheritable-props/subversion/libsvn_fs_fs/caching.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_fs_fs/caching.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_fs_fs/caching.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_fs_fs/caching.c Thu Mar 15 21:40:15 2012
@@ -339,27 +339,6 @@ svn_fs_fs__initialize_caches(svn_fs_t *f
 
   SVN_ERR(init_callbacks(ffd->fulltext_cache, fs, no_handler, pool));
 
-  /* initialize revprop cache, if full-text caching has been enabled */
-  if (cache_fulltexts)
-    {
-      SVN_ERR(create_cache(&(ffd->revprop_cache),
-                           NULL,
-                           membuffer,
-                           0, 0, /* Do not use inprocess cache */
-                           svn_fs_fs__serialize_properties,
-                           svn_fs_fs__deserialize_properties,
-                           APR_HASH_KEY_STRING,
-                           apr_pstrcat(pool, prefix, "REVPROP",
-                                       (char *)NULL),
-                           fs->pool));
-    }
-  else
-    {
-      ffd->revprop_cache = NULL;
-    }
-
-  SVN_ERR(init_callbacks(ffd->revprop_cache, fs, no_handler, pool));
-
   /* initialize txdelta window cache, if that has been enabled */
   if (cache_txdeltas)
     {

Modified: subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs.h?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs.h (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs.h Thu Mar 15 21:40:15 2012
@@ -60,8 +60,6 @@ extern "C" {
 #define PATH_LOCKS_DIR        "locks"            /* Directory of locks */
 #define PATH_MIN_UNPACKED_REV "min-unpacked-rev" /* Oldest revision which
                                                     has not been packed. */
-#define PATH_REVPROP_GEN      "revprop-gen"      /* File containing the
-                                                    revprop change counter */
 /* If you change this, look at tests/svn_test_fs.c(maybe_install_fsfs_conf) */
 #define PATH_CONFIG           "fsfs.conf"        /* Configuration */
 
@@ -200,8 +198,7 @@ typedef struct fs_fs_shared_data_t
   apr_pool_t *common_pool;
 } fs_fs_shared_data_t;
 
-/* Private (non-shared) FSFS-specific data for each svn_fs_t object.
-   Any caches in here may be NULL. */
+/* Private (non-shared) FSFS-specific data for each svn_fs_t object. */
 typedef struct fs_fs_data_t
 {
   /* The format number of this FS. */
@@ -240,15 +237,6 @@ typedef struct fs_fs_data_t
      rep key (revision/offset) to svn_string_t. */
   svn_cache__t *fulltext_cache;
 
-  /* Revprop "generation" that is valid for this svn_fs_t.
-     It is the revprop change counter read once from "revprop-gen".
-     Will be read upon first access.  0 means that the value has not
-     been read from disk, yet. */
-  apr_int64_t revprop_generation;
-  
-  /* Revision property cache.  Maps from (rev,generation) to apr_hash_t. */
-  svn_cache__t *revprop_cache;
-
   /* Pack manifest cache; a cache mapping (svn_revnum_t) shard number to
      a manifest; and a manifest is a mapping from (svn_revnum_t) revision
      number offset within a shard to (apr_off_t) byte-offset in the

Modified: subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs_fs.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs_fs.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_fs_fs/fs_fs.c Thu Mar 15 21:40:15 2012
@@ -225,12 +225,6 @@ path_lock(svn_fs_t *fs, apr_pool_t *pool
 }
 
 static const char *
-path_revprop_generation(svn_fs_t *fs, apr_pool_t *pool)
-{
-  return svn_dirent_join(fs->path, PATH_REVPROP_GEN, pool);
-}
-
-static const char *
 path_rev_packed(svn_fs_t *fs, svn_revnum_t rev, const char *kind,
                 apr_pool_t *pool)
 {
@@ -876,39 +870,25 @@ get_file_offset(apr_off_t *offset_p, apr
 }
 
 
-/* Check that BUF, a nul-terminated buffer of text from file PATH,
+/* Check that BUF, a nul-terminated buffer of text from format file PATH,
    contains only digits at OFFSET and beyond, raising an error if not.
-   TITLE contains a user-visible description of the file, usually the
-   short file name.
 
    Uses POOL for temporary allocation. */
 static svn_error_t *
-check_file_buffer_numeric(const char *buf, apr_off_t offset,
-                          const char *path, const char *title,
-                          apr_pool_t *pool)
+check_format_file_buffer_numeric(const char *buf, apr_off_t offset,
+                                 const char *path, apr_pool_t *pool)
 {
   const char *p;
 
   for (p = buf + offset; *p; p++)
     if (!svn_ctype_isdigit(*p))
       return svn_error_createf(SVN_ERR_BAD_VERSION_FILE_FORMAT, NULL,
-        _("%s file '%s' contains unexpected non-digit '%c' within '%s'"),
-        title, svn_dirent_local_style(path, pool), *p, buf);
+        _("Format file '%s' contains unexpected non-digit '%c' within '%s'"),
+        svn_dirent_local_style(path, pool), *p, buf);
 
   return SVN_NO_ERROR;
 }
 
-/* Check that BUF, a nul-terminated buffer of text from format file PATH,
-   contains only digits at OFFSET and beyond, raising an error if not.
-
-   Uses POOL for temporary allocation. */
-static svn_error_t *
-check_format_file_buffer_numeric(const char *buf, apr_off_t offset,
-                                 const char *path, apr_pool_t *pool)
-{
-  return check_file_buffer_numeric(buf, offset, path, "Format", pool);
-}
-
 /* Read the format number and maximum number of files per directory
    from PATH and return them in *PFORMAT and *MAX_FILES_PER_DIR
    respectively.
@@ -2707,104 +2687,6 @@ svn_fs_fs__rev_get_root(svn_fs_id_t **ro
   return SVN_NO_ERROR;
 }
 
-/* Reads the revprop_gen file and writes the content into the
-   REVPROP_GENERATION member of FS.  Use pool for allocations. */
-static svn_error_t *
-read_revprop_generation(svn_fs_t *fs,
-                        apr_pool_t *pool)
-{
-  fs_fs_data_t *ffd = fs->fsap_data;
-  
-  const char *path = path_revprop_generation(fs, pool);
-  svn_error_t *err;
-  char buf[80];
-  int i;
-
-  /* Read the raw data from the file, if it exists. If it does
-     not, set the generation to "1" and return.
-     We don't want to have this function fail.  So, patiently
-     retry a couple of times the case the OS denied us access. */
-  apr_pool_t *iterpool = svn_pool_create(pool);
-  for (i = 0; i < RECOVERABLE_RETRY_COUNT; ++i)
-    {
-      apr_file_t *file;
-      apr_size_t len = sizeof(buf);
-      
-      svn_pool_clear(iterpool);
-
-      err = svn_io_file_open(&file, path, APR_READ | APR_BUFFERED,
-                            APR_OS_DEFAULT, iterpool);
-      if (err && APR_STATUS_IS_ENOENT(err->apr_err))
-        {
-          /* No-one changed a revprop -> we are still at gen 1. */
-          ffd->revprop_generation = 1;
-          svn_error_clear(err);
-          return SVN_NO_ERROR;
-        }
-      svn_error_clear(err);
-
-      RETRY_RECOVERABLE(err, file,
-                        svn_io_read_length_line(file,
-                                                buf,
-                                                &len,
-                                                iterpool));
-      IGNORE_RECOVERABLE(err, svn_io_file_close(file,
-                                                iterpool));
-
-      break;
-    }
-  SVN_ERR(err);
-
-  svn_pool_destroy(iterpool);
-
-  /* Check that the first line contains only digits. */
-  SVN_ERR(check_file_buffer_numeric(buf, 0, path, 
-                                    "Revprop generations", pool));
-  SVN_ERR(svn_cstring_atoi64(&ffd->revprop_generation, buf));
-
-  /* Graceful behavior in case someone put a "0" in the file. */
-  if (ffd->revprop_generation <= 0)
-    ffd->revprop_generation = 1;
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-check_revprop_generation(svn_fs_t *fs,
-                         apr_pool_t *pool)
-{
-  fs_fs_data_t *ffd = fs->fsap_data;
-  
-  return ffd->revprop_generation == 0
-    ? read_revprop_generation(fs, pool)
-    : SVN_NO_ERROR;
-}
-
-static svn_error_t *
-increment_revprop_generation(svn_fs_t *fs,
-                             apr_pool_t *pool)
-{
-  fs_fs_data_t *ffd = fs->fsap_data;
-  
-  const char *path = path_revprop_generation(fs, pool);
-  const char *tmp_filename;
-  svn_string_t *generation;
-
-  SVN_ERR(read_revprop_generation(fs, pool));
-
-  /* Increment the key and add a trailing \n to the string so the
-     txn-current file has a newline in it. */
-  ++ffd->revprop_generation;
-  generation = svn_string_createf(pool, "%ld\n", ffd->revprop_generation);
-
-  SVN_ERR(svn_io_write_unique(&tmp_filename,
-                              svn_dirent_dirname(path, pool),
-                              generation->data, generation->len,
-                              svn_io_file_del_none, pool));
-  return move_into_place(tmp_filename, path, 
-                         svn_fs_fs__path_current(fs, pool), pool);
-}
-
 /* Set the revision property list of revision REV in filesystem FS to
    PROPLIST.  Use POOL for temporary allocations. */
 static svn_error_t *
@@ -2821,10 +2703,6 @@ set_revision_proplist(svn_fs_t *fs,
       const char *tmp_path;
       const char *perms_reference;
       svn_stream_t *stream;
-      svn_node_kind_t kind;
-
-      /* test whether revprops already exist for this revision */
-      SVN_ERR(svn_io_check_path(final_path, &kind, pool));
 
       /* ### do we have a directory sitting around already? we really shouldn't
          ### have to get the dirname here. */
@@ -2841,12 +2719,6 @@ set_revision_proplist(svn_fs_t *fs,
       SVN_ERR(svn_fs_fs__path_rev_absolute(&perms_reference, fs, rev, pool));
       SVN_ERR(move_into_place(tmp_path, final_path, perms_reference, pool));
 
-      /* Invalidate all cached revprops for this FS and for all other
-         users that haven't read any revprops, YET.  Since writing revprops
-         implies a write lock, there can be no races. */
-      if (kind != svn_node_none)
-        SVN_ERR(increment_revprop_generation(fs, pool));
-
       return SVN_NO_ERROR;
     }
 
@@ -2860,22 +2732,8 @@ revision_proplist(apr_hash_t **proplist_
                   apr_pool_t *pool)
 {
   apr_hash_t *proplist;
-  fs_fs_data_t *ffd = fs->fsap_data;
-  const char *key;
 
   SVN_ERR(ensure_revision_exists(fs, rev, pool));
-  SVN_ERR(check_revprop_generation(fs, pool));
-
-  /* Try cache lookup first. */
-  key = svn_fs_fs__combine_two_numbers(rev, ffd->revprop_generation, pool);
-  if (ffd->revprop_cache)
-    {
-      svn_boolean_t is_cached;
-      SVN_ERR(svn_cache__get((void **) proplist_p, &is_cached,
-                              ffd->revprop_cache, key, pool));
-      if (is_cached)
-        return SVN_NO_ERROR;
-    }
 
   /* if (1); null condition for easier merging to revprop-packing */
     {
@@ -2931,10 +2789,6 @@ revision_proplist(apr_hash_t **proplist_
       svn_pool_destroy(iterpool);
     }
 
-  /* Cache the result, if caching has been activated. */
-  if (ffd->revprop_cache)
-    SVN_ERR(svn_cache__set(ffd->revprop_cache, key, proplist, pool));
-
   *proplist_p = proplist;
 
   return SVN_NO_ERROR;
@@ -6908,9 +6762,6 @@ svn_fs_fs__create(svn_fs_t *fs,
                                  "", pool));
     }
 
-  /* Create the revprop generation tracking file. */
-  SVN_ERR(increment_revprop_generation(fs, pool));
-
   /* This filesystem is ready.  Stamp it with a format number. */
   SVN_ERR(write_format(path_format(fs, pool),
                        ffd->format, ffd->max_files_per_dir, FALSE, pool));
@@ -8961,7 +8812,6 @@ hotcopy_create_empty_dest(svn_fs_t *src_
 {
   fs_fs_data_t *src_ffd = src_fs->fsap_data;
   fs_fs_data_t *dst_ffd = dst_fs->fsap_data;
-  svn_node_kind_t kind;
 
   dst_fs->path = apr_pstrdup(pool, dst_path);
 
@@ -9025,14 +8875,6 @@ hotcopy_create_empty_dest(svn_fs_t *src_
                                  "", pool));
     }
 
-  /* Copy the revprop generation file if it exists in SRC_FS. */
-  SVN_ERR(svn_io_check_path(path_revprop_generation(src_fs, pool),
-                            &kind, pool));
-  if (kind == svn_node_file)
-    SVN_ERR(svn_io_copy_file(path_revprop_generation(src_fs, pool),
-                             path_revprop_generation(dst_fs, pool),
-                             TRUE, pool));
-    
   dst_ffd->youngest_rev_cache = 0;
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/inheritable-props/subversion/libsvn_fs_fs/rep-cache-db.sql
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_fs_fs/rep-cache-db.sql?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_fs_fs/rep-cache-db.sql (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_fs_fs/rep-cache-db.sql Thu Mar 15 21:40:15 2012
@@ -33,11 +33,6 @@ CREATE TABLE rep_cache (
   expanded_size INTEGER NOT NULL
   );
 
-/* There isn't an implicit index on a TEXT column, so create an explicit one. */
-CREATE INDEX I_HASH on REP_CACHE (hash);
-
-/* The index didn't exist until 1.7.5; therefore, some USER_VERSION=1
-   rep-cache.db files out there DO NOT contain an I_HASH index. */
 PRAGMA USER_VERSION = 1;
 
 

Modified: subversion/branches/inheritable-props/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_repos/log.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_repos/log.c Thu Mar 15 21:40:15 2012
@@ -1742,7 +1742,7 @@ reduce_search(apr_array_header_t *paths,
       if (!ranges)
         continue;
 
-      /* ranges is ordered, could we use some sort of binay search
+      /* ranges is ordered, could we use some sort of binary search
          rather than iterating? */
       for (j = 0; j < ranges->nelts; ++j)
         {

Modified: subversion/branches/inheritable-props/subversion/libsvn_subr/mergeinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_subr/mergeinfo.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_subr/mergeinfo.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_subr/mergeinfo.c Thu Mar 15 21:40:15 2012
@@ -2111,7 +2111,6 @@ svn_mergeinfo__remove_prefix_from_catalo
                                           apr_pool_t *pool)
 {
   apr_hash_index_t *hi;
-  apr_ssize_t prefix_len = strlen(prefix_path);
 
   SVN_ERR_ASSERT(prefix_path[0] == '/');
 
@@ -2120,23 +2119,13 @@ svn_mergeinfo__remove_prefix_from_catalo
   for (hi = apr_hash_first(pool, in_catalog); hi; hi = apr_hash_next(hi))
     {
       const char *original_path = svn__apr_hash_index_key(hi);
-      apr_ssize_t klen = svn__apr_hash_index_klen(hi);
       svn_mergeinfo_t value = svn__apr_hash_index_val(hi);
-      apr_ssize_t padding = 0;
+      const char *new_path;
 
-      SVN_ERR_ASSERT(klen >= prefix_len);
-      SVN_ERR_ASSERT(svn_fspath__skip_ancestor(prefix_path, original_path));
+      new_path = svn_fspath__skip_ancestor(prefix_path, original_path);
+      SVN_ERR_ASSERT(new_path);
 
-      /* If the ORIGINAL_PATH doesn't match the PREFIX_PATH exactly
-         and we're not simply removing a single leading slash (such as
-         when PREFIX_PATH is "/"), we advance our string offset by an
-         extra character (to get past the directory separator that
-         follows the prefix).  */
-      if ((strcmp(original_path, prefix_path) != 0) && (prefix_len != 1))
-        padding = 1;
-
-      apr_hash_set(*out_catalog, original_path + prefix_len + padding,
-                   klen - prefix_len - padding, value);
+      apr_hash_set(*out_catalog, new_path, APR_HASH_KEY_STRING, value);
     }
 
   return SVN_NO_ERROR;

Modified: subversion/branches/inheritable-props/subversion/libsvn_wc/adm_crawler.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_wc/adm_crawler.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_wc/adm_crawler.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_wc/adm_crawler.c Thu Mar 15 21:40:15 2012
@@ -494,10 +494,14 @@ report_revisions_and_depths(svn_wc__db_t
         {
           svn_boolean_t is_incomplete;
           svn_boolean_t start_empty;
+          svn_depth_t report_depth = ths->depth;
 
           is_incomplete = (ths->status == svn_wc__db_status_incomplete);
           start_empty = is_incomplete;
 
+          if (!SVN_DEPTH_IS_RECURSIVE(depth))
+            report_depth = svn_depth_empty;
+
           /* When a <= 1.6 working copy is upgraded without some of its
              subdirectories we miss some information in the database. If we
              report the revision as -1, the update editor will receive an
@@ -525,7 +529,7 @@ report_revisions_and_depths(svn_wc__db_t
                                                 dir_repos_root,
                                                 ths->repos_relpath, iterpool),
                                             ths->revnum,
-                                            ths->depth,
+                                            report_depth,
                                             start_empty,
                                             ths->lock ? ths->lock->token
                                                       : NULL,
@@ -534,7 +538,7 @@ report_revisions_and_depths(svn_wc__db_t
                 SVN_ERR(reporter->set_path(report_baton,
                                            this_report_relpath,
                                            ths->revnum,
-                                           ths->depth,
+                                           report_depth,
                                            start_empty,
                                            ths->lock ? ths->lock->token : NULL,
                                            iterpool));
@@ -548,7 +552,7 @@ report_revisions_and_depths(svn_wc__db_t
                                               dir_repos_root,
                                               ths->repos_relpath, iterpool),
                                           ths->revnum,
-                                          ths->depth,
+                                          report_depth,
                                           start_empty,
                                           ths->lock ? ths->lock->token : NULL,
                                           iterpool));
@@ -572,7 +576,7 @@ report_revisions_and_depths(svn_wc__db_t
               SVN_ERR(reporter->set_path(report_baton,
                                          this_report_relpath,
                                          ths->revnum,
-                                         ths->depth,
+                                         report_depth,
                                          start_empty,
                                          ths->lock ? ths->lock->token : NULL,
                                          iterpool));

Modified: subversion/branches/inheritable-props/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_wc/status.c?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_wc/status.c Thu Mar 15 21:40:15 2012
@@ -526,9 +526,17 @@ assemble_status(svn_wc_status3_t **statu
           if (!info->have_base)
             copied = TRUE;
           else
-            SVN_ERR(svn_wc__internal_node_get_schedule(NULL, &copied,
-                                                       db, local_abspath,
-                                                       scratch_pool));
+            {
+              const char *work_del_abspath;
+
+              /* Find out details of our deletion.  */
+              SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
+                                               &work_del_abspath, NULL,
+                                               db, local_abspath,
+                                               scratch_pool, scratch_pool));
+              if (work_del_abspath)
+                copied = TRUE; /* Working deletion */
+            }
         }
       else if (!dirent || dirent->kind != svn_node_dir)
         {
@@ -544,11 +552,17 @@ assemble_status(svn_wc_status3_t **statu
     {
       if (info->status == svn_wc__db_status_deleted)
         {
+          const char *work_del_abspath;
+
           node_status = svn_wc_status_deleted;
 
-          SVN_ERR(svn_wc__internal_node_get_schedule(NULL, &copied,
-                                                     db, local_abspath,
-                                                     scratch_pool));
+          /* Find out details of our deletion.  */
+          SVN_ERR(svn_wc__db_scan_deletion(NULL, NULL,
+                                           &work_del_abspath, NULL,
+                                           db, local_abspath,
+                                           scratch_pool, scratch_pool));
+          if (work_del_abspath)
+            copied = TRUE; /* Working deletion */
         }
       else if (!dirent || dirent->kind != svn_node_file)
         {

Modified: subversion/branches/inheritable-props/subversion/libsvn_wc/wc-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/libsvn_wc/wc-metadata.sql?rev=1301216&r1=1301215&r2=1301216&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/libsvn_wc/wc-metadata.sql (original)
+++ subversion/branches/inheritable-props/subversion/libsvn_wc/wc-metadata.sql Thu Mar 15 21:40:15 2012
@@ -389,12 +389,13 @@ CREATE TABLE NODES (
   moved_here  INTEGER,
 
   /* If the underlying node was moved away (rather than just deleted), this
-     specifies the local_relpath of where the BASE node was moved to.
+     specifies the local_relpath of where the node was moved to.
      This is set only on the root of a move, and is NULL for all children.
 
-     Note that moved_to never refers to *this* node. It always refers
-     to the "underlying" node in the BASE tree. A non-NULL moved_to column
-     is only valid in rows where op_depth == 0. */
+     The op-depth of the moved-to node is not recorded. A moved_to path
+     always points at a node within the highest op-depth layer at the
+     destination. This invariant must be maintained by operations which
+     change existing move information. */
   moved_to  TEXT,