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,