[Subversion Wiki] Trivial Update of "ServerDictatedConfiguration" by pburba
Dear Wiki user, You have subscribed to a wiki page or wiki category on "Subversion Wiki" for change notification. The "ServerDictatedConfiguration" page has been changed by pburba: http://wiki.apache.org/subversion/ServerDictatedConfiguration?action=diff&rev1=13&rev2=14 The high-level behavior for repository-dictated configuration is relatively simple: the repository maintains a list of configuration parameters and values, and upon request, provides these to the client who then applies them appropriately. There are a number of specific bits of configuration that existing Subversion users and administrators wish to have propagated from the server to the client. There are also different scopes at which administrators might reasonably wish to apply differing defaults for these things: server-wide, repository-wide, or local to a particular directory hierarchy within a specific repository. The following is a listing of those that we know about, with some notes about scope and desired degrees of control: - ||'''Configuration''' ||'''Scope''' ||'''Enforceability''' ||'''Notes''' || ||auto-props ||per-directory ||Enforceable via hook scripts ||Clients should be allowed to override this || ||ignores ||per-directory ||Enforceable via hook scripts ||Client should be allowed to override this || @@ -17, +16 @@ ||log message templates ||per-directory ||Enforceable via hook scripts ||Doesn't fit the name=value configuration motif quite as readily as some of the others. Would a client need to override this? || ||myriad authn-related stuff ||per-server, per-repos ||Unenforceable ||Lack of enforceability plus relationship to security means that admins do not want the client to be able to trivially override this setting. Precise requirements TBD (is this a boolean "allow/disallow plaintext password caching", or "require X, Y or Z encrypted password stores", or ...?) || + + + {{{#!wiki warning The configuration the server dictates can at best be only a suggestion to the client, with well-behaving clients honoring that suggestion. As free software, though, most such clients could be modified by a malicious user to ignore server-side suggestions. Server-side enforcement of desired behaviors (where possible, and often via hook scripts) is still recommended. }}} - At least one user specifically called out the need for the server to enforce adherence to the configured behaviors ''without'' requiring hook scripts to do so. For example, if the repository has a configured auto-props list, the Subversion C code is perfectly capable of validating that incoming committed items obey those settings, failing the commit otherwise. This seems like a reasonable request so long as we permit admins to specify which of their configuration settings are "suggested" versus "required" (again, taking into account that anything unenforceable can't truly be "required"). Subversion should recognize multiple levels of possible hierarchy in the server-side configuration: @@ -36, +37 @@ 1. enforced - The configuration value is required and adherence to it is verified by the server logic === Server-client transmission mechanism === - Over ra-neon/ra-serf, the client will send to the server the sha1 hash of the server-dictated config that it current has cached as part of the OPTIONS request. If the server has a different version, it will send that to the client in the OPTIONS response. For ra-svn, a similar thing happens as part of the initial connection handshake/feature exchange. This is an opportunistic caching approach, keeping the client in sync with the repository configuration any time the client contacts the repository. This mechanism requires that there exist a predictable and consistent manner in which to calculate the checksum of the configuration. + Over ra-neon/ra-serf, the client will send to the server the sha1 hash of the server-dictated config that it currently has cached as part of the OPTIONS request. If the server has a different version, it will send that to the client in the OPTIONS response. For ra-svn, a similar thing happens as part of the initial connection handshake/feature exchange. This is an opportunistic caching approach, keeping the client in sync with the repository configuration any time the client contacts the repository. This mechanism requires that there exist a predictable and consistent manner in which to calculate the checksum of the configuration. === Server-side storage === ''[TODO]''
svn commit: r1212017 - /subversion/trunk/subversion/tests/cmdline/merge_tests.py
Author: pburba Date: Thu Dec 8 18:16:37 2011 New Revision: 1212017 URL: http://svn.apache.org/viewvc?rev=1212017&view=rev Log: * subversion/tests/cmdline/merge_tests.py (unnecessary_noninheritable_mergeinfo_shallow_merge): Fix some misspellings. Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1212017&r1=1212016&r2=1212017&view=diff == --- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Thu Dec 8 18:16:37 2011 @@ -17242,7 +17242,7 @@ def unnecessary_noninheritable_mergeinfo @Issue(4057) @SkipUnless(server_has_mergeinfo) def unnecessary_noninheritable_mergeinfo_shallow_merge(sbox): - "shallow merge reaches all neccessary subtrees" + "shallow merge reaches all necessary subtrees" B_branch_path = os.path.join(sbox.wc_dir, 'branch', 'B') E_path= os.path.join(sbox.wc_dir, 'A', 'B', 'E') @@ -17266,7 +17266,7 @@ def unnecessary_noninheritable_mergeinfo # /A/B:3* <-- Should be inheritable # Properties on 'branch\B\lambda': # svn:mergeinfo - # /A/B/lambda:3 <-- Not neccessary + # /A/B/lambda:3 <-- Not necessary expected_skip = wc.State(B_branch_path, {}) svntest.actions.run_and_verify_merge(B_branch_path, '2', '3', sbox.repo_url + '/A/B', None, @@ -17305,7 +17305,7 @@ def unnecessary_noninheritable_mergeinfo # /A/B:4* <-- Should be inheritable # Properties on 'branch\B\E': # svn:mergeinfo - # /A/B/E:4 <-- Not neccessary + # /A/B/E:4 <-- Not necessary expected_output = wc.State(B_branch_path, { 'E' : Item(status=' U'), })
svn commit: r1212015 - /subversion/trunk/subversion/libsvn_client/merge.c
Author: pburba Date: Thu Dec 8 18:12:55 2011 New Revision: 1212015 URL: http://svn.apache.org/viewvc?rev=1212015&view=rev Log: Adjust the issue #4057 fix made in r1211620 to account for svn_ra_get_log2's limitations when using a BDB backend. This fixes the currently failing tests with --fs-type=bdb: FAIL: merge_tests.py 120: reverse merge adds subtree FAIL: merge_tests.py 124: shallow merge reaches all necessary subtrees * subversion/libsvn_client/merge.c (log_find_operative_subtree_baton_t): Add a svn_wc_context_t * member. (log_find_operative_subtree_revs): Account for the fact that the svn_log_changed_path2_t.node_kind members in in log_entry->changed_paths2 may be set to svn_node_unknown (e.g. with a BDB backend). (get_operative_immediate_children): Initialize new log_find_operative_subtree_baton_t member. Modified: subversion/trunk/subversion/libsvn_client/merge.c Modified: subversion/trunk/subversion/libsvn_client/merge.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/merge.c?rev=1212015&r1=1212014&r2=1212015&view=diff == --- subversion/trunk/subversion/libsvn_client/merge.c (original) +++ subversion/trunk/subversion/libsvn_client/merge.c Thu Dec 8 18:12:55 2011 @@ -7197,6 +7197,7 @@ typedef struct log_find_operative_subtre const char *merge_source_fspath; const char *merge_target_abspath; svn_depth_t depth; + svn_wc_context_t *wc_ctx; /* A pool to allocate additions to the hashes in. */ apr_pool_t *result_pool; @@ -7245,10 +7246,39 @@ log_find_operative_subtree_revs(void *ba child = svn_relpath_dirname(rel_path, iterpool); if (child[0] == '\0') { + /* The svn_log_changed_path2_t.node_kind members in + LOG_ENTRY->CHANGED_PATHS2 may be set to + svn_node_unknown, see svn_log_changed_path2_t and + svn_fs_paths_changed2. In that case we check the + type of the corresponding subtree in the merge + target. */ + svn_node_kind_t node_kind; + + if (change->node_kind == svn_node_unknown) +{ + const char *wc_child_abspath = +svn_dirent_join(log_baton->merge_target_abspath, +rel_path, iterpool); + + /* ### ptb - svn_wc_read_kind is very tolerant when we ask + ### it about unversioned, non-existent, and missing WC + ### paths, simply setting *NODE_KIND svn_kind_none in + ### those cases. Is there any legitimate error we + ### might enocunter during a merge where we'd want + ### to clear the error and continue? */ + SVN_ERR(svn_wc_read_kind(&node_kind, log_baton->wc_ctx, + wc_child_abspath, FALSE, + iterpool)); +} + else +{ + node_kind = change->node_kind; +} + /* We only care about immediate directory children if DEPTH is svn_depth_files. */ if (log_baton->depth == svn_depth_files - && change->node_kind == svn_node_file) + && node_kind != svn_node_dir) continue; /* If depth is svn_depth_immediates, then we only care @@ -7338,6 +7368,7 @@ get_operative_immediate_children(apr_has log_baton.merge_source_fspath = merge_source_fspath; log_baton.merge_target_abspath = merge_target_abspath; log_baton.depth = depth; + log_baton.wc_ctx = wc_ctx; log_baton.result_pool = result_pool; log_targets = apr_array_make(scratch_pool, 1, sizeof(const char *)); APR_ARRAY_PUSH(log_targets, const char *) = "";
svn commit: r1211998 - /subversion/branches/1.7.x/STATUS
Author: steveking Date: Thu Dec 8 17:26:50 2011 New Revision: 1211998 URL: http://svn.apache.org/viewvc?rev=1211998&view=rev Log: * STATUS: Cast vote. Modified: subversion/branches/1.7.x/STATUS Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1211998&r1=1211997&r2=1211998&view=diff == --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Thu Dec 8 17:26:50 2011 @@ -109,7 +109,7 @@ Candidate changes: Justification: It's a SEGV. Votes: - +1: philip, rhuijben + +1: philip, rhuijben, steveking Veto-blocked changes: =
svn commit: r1211975 - /subversion/trunk/subversion/tests/cmdline/merge_tests.py
Author: pburba Date: Thu Dec 8 16:54:18 2011 New Revision: 1211975 URL: http://svn.apache.org/viewvc?rev=1211975&view=rev Log: * subversion/tests/cmdline/merge_tests.py (reverse_merge_adds_subtree): Remove a redundant update. Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py Modified: subversion/trunk/subversion/tests/cmdline/merge_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/merge_tests.py?rev=1211975&r1=1211974&r2=1211975&view=diff == --- subversion/trunk/subversion/tests/cmdline/merge_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/merge_tests.py Thu Dec 8 16:54:18 2011 @@ -16913,7 +16913,6 @@ def reverse_merge_adds_subtree(sbox): # ..\..\..\subversion\libsvn_subr\kitchensink.c:57: (apr_err=200022) # svn: E200022: Negative revision number found parsing '-7' svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) - svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir) expected_output = wc.State(A_COPY_path, { 'D/H/chi' : Item(status='A '), })
svn propchange: r1211908 - svn:log
Author: rhuijben Revision: 1211908 Modified property: svn:log Modified: svn:log at Thu Dec 8 14:31:16 2011 -- --- svn:log (original) +++ svn:log Thu Dec 8 14:31:16 2011 @@ -1 +1,3 @@ +[Accidentally reverts r1211904. Fixed in r1211909] + * STATUS: Fix text.
Re: svn commit: r1211908 - /subversion/branches/1.7.x/STATUS
Did you mean to remove philip's votes? -Hyrum On Thu, Dec 8, 2011 at 8:26 AM, wrote: > Author: rhuijben > Date: Thu Dec 8 14:26:56 2011 > New Revision: 1211908 > > URL: http://svn.apache.org/viewvc?rev=1211908&view=rev > Log: > * STATUS: Fix text. > > Modified: > subversion/branches/1.7.x/STATUS > > Modified: subversion/branches/1.7.x/STATUS > URL: > http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1211908&r1=1211907&r2=1211908&view=diff > == > --- subversion/branches/1.7.x/STATUS (original) > +++ subversion/branches/1.7.x/STATUS Thu Dec 8 14:26:56 2011 > @@ -86,7 +86,7 @@ Candidate changes: > Justification: > Server asserts after being upgraded. > Votes: > - +1: danielsh, philip > + +1: danielsh > > * r1210147 > Fix the 'svn log --diff' code so that it correctly shows a diff of a > @@ -100,9 +100,9 @@ Candidate changes: > * r1211483 > Don't segfault on 'svn mkdir svn://localhost' > Justification: > - Though shall not segfault. > + Thou shall not segfault. > Votes: > - +1: rhuijben, philip > + +1: rhuijben > > * r1211859, r1211885 > Fix issue 4074, SEGV on "svn rm ROOT_URL" > > -- uberSVN: Apache Subversion Made Easy http://www.uberSVN.com/
svn commit: r1211909 - /subversion/branches/1.7.x/STATUS
Author: rhuijben Date: Thu Dec 8 14:28:57 2011 New Revision: 1211909 URL: http://svn.apache.org/viewvc?rev=1211909&view=rev Log: * STATUS: Revert accidental vote changes from r1211908 Modified: subversion/branches/1.7.x/STATUS Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1211909&r1=1211908&r2=1211909&view=diff == --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Thu Dec 8 14:28:57 2011 @@ -86,7 +86,7 @@ Candidate changes: Justification: Server asserts after being upgraded. Votes: - +1: danielsh + +1: danielsh, philip * r1210147 Fix the 'svn log --diff' code so that it correctly shows a diff of a @@ -102,7 +102,7 @@ Candidate changes: Justification: Thou shall not segfault. Votes: - +1: rhuijben + +1: rhuijben, philip * r1211859, r1211885 Fix issue 4074, SEGV on "svn rm ROOT_URL"
svn commit: r1211908 - /subversion/branches/1.7.x/STATUS
Author: rhuijben Date: Thu Dec 8 14:26:56 2011 New Revision: 1211908 URL: http://svn.apache.org/viewvc?rev=1211908&view=rev Log: * STATUS: Fix text. Modified: subversion/branches/1.7.x/STATUS Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1211908&r1=1211907&r2=1211908&view=diff == --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Thu Dec 8 14:26:56 2011 @@ -86,7 +86,7 @@ Candidate changes: Justification: Server asserts after being upgraded. Votes: - +1: danielsh, philip + +1: danielsh * r1210147 Fix the 'svn log --diff' code so that it correctly shows a diff of a @@ -100,9 +100,9 @@ Candidate changes: * r1211483 Don't segfault on 'svn mkdir svn://localhost' Justification: - Though shall not segfault. + Thou shall not segfault. Votes: - +1: rhuijben, philip + +1: rhuijben * r1211859, r1211885 Fix issue 4074, SEGV on "svn rm ROOT_URL"
svn commit: r1211904 - /subversion/branches/1.7.x/STATUS
Author: philip Date: Thu Dec 8 14:22:59 2011 New Revision: 1211904 URL: http://svn.apache.org/viewvc?rev=1211904&view=rev Log: * STATUS: Vote. Modified: subversion/branches/1.7.x/STATUS Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1211904&r1=1211903&r2=1211904&view=diff == --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Thu Dec 8 14:22:59 2011 @@ -86,7 +86,7 @@ Candidate changes: Justification: Server asserts after being upgraded. Votes: - +1: danielsh + +1: danielsh, philip * r1210147 Fix the 'svn log --diff' code so that it correctly shows a diff of a @@ -102,7 +102,7 @@ Candidate changes: Justification: Though shall not segfault. Votes: - +1: rhuijben + +1: rhuijben, philip * r1211859, r1211885 Fix issue 4074, SEGV on "svn rm ROOT_URL"
svn commit: r1211897 - /subversion/branches/1.7.x/STATUS
Author: rhuijben Date: Thu Dec 8 14:10:11 2011 New Revision: 1211897 URL: http://svn.apache.org/viewvc?rev=1211897&view=rev Log: * STATUS: Cast vote. Modified: subversion/branches/1.7.x/STATUS Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1211897&r1=1211896&r2=1211897&view=diff == --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Thu Dec 8 14:10:11 2011 @@ -109,7 +109,7 @@ Candidate changes: Justification: It's a SEGV. Votes: - +1: philip + +1: philip, rhuijben Veto-blocked changes: =
svn commit: r1211888 - /subversion/branches/1.7.x/STATUS
Author: philip Date: Thu Dec 8 13:54:06 2011 New Revision: 1211888 URL: http://svn.apache.org/viewvc?rev=1211888&view=rev Log: * STATUS: Propose issue 4074. Modified: subversion/branches/1.7.x/STATUS Modified: subversion/branches/1.7.x/STATUS URL: http://svn.apache.org/viewvc/subversion/branches/1.7.x/STATUS?rev=1211888&r1=1211887&r2=1211888&view=diff == --- subversion/branches/1.7.x/STATUS (original) +++ subversion/branches/1.7.x/STATUS Thu Dec 8 13:54:06 2011 @@ -104,6 +104,13 @@ Candidate changes: Votes: +1: rhuijben + * r1211859, r1211885 + Fix issue 4074, SEGV on "svn rm ROOT_URL" + Justification: + It's a SEGV. + Votes: + +1: philip + Veto-blocked changes: =
svn commit: r1211885 - in /subversion/trunk/subversion: libsvn_client/delete.c tests/cmdline/basic_tests.py
Author: philip Date: Thu Dec 8 13:48:05 2011 New Revision: 1211885 URL: http://svn.apache.org/viewvc?rev=1211885&view=rev Log: Followup to r1211859. * subversion/libsvn_client/delete.c (delete_urls_multi_repos): Tweak error message and error code. * subversion/tests/cmdline/basic_tests.py (basic_delete): Adjust expected error. Modified: subversion/trunk/subversion/libsvn_client/delete.c subversion/trunk/subversion/tests/cmdline/basic_tests.py Modified: subversion/trunk/subversion/libsvn_client/delete.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/delete.c?rev=1211885&r1=1211884&r2=1211885&view=diff == --- subversion/trunk/subversion/libsvn_client/delete.c (original) +++ subversion/trunk/subversion/libsvn_client/delete.c Thu Dec 8 13:48:05 2011 @@ -272,11 +272,11 @@ delete_urls_multi_repos(const apr_array_ APR_ARRAY_PUSH(relpaths_list, const char *) = repos_relpath; } - /* Check we identified a non-root relpath. Return an FS error - similar to the one further down. */ + /* Check we identified a non-root relpath. Return an RA error + code for 1.6 compatibility. */ if (!repos_relpath || !*repos_relpath) -return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL, - "URL '%s' not within a repository root", uri); +return svn_error_createf(SVN_ERR_RA_ILLEGAL_URL, NULL, + "URL '%s' not within a repository", uri); /* Now, test to see if the thing actually exists. */ SVN_ERR(svn_ra_check_path(ra_session, repos_relpath, SVN_INVALID_REVNUM, Modified: subversion/trunk/subversion/tests/cmdline/basic_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/basic_tests.py?rev=1211885&r1=1211884&r2=1211885&view=diff == --- subversion/trunk/subversion/tests/cmdline/basic_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/basic_tests.py Thu Dec 8 13:48:05 2011 @@ -1192,7 +1192,7 @@ def basic_delete(sbox): iota_URL) # Issue 4074, deleting a root url SEGV. - expected_error = 'svn: E160013: .*not within a repository root' + expected_error = 'svn: E17: .*not within a repository' svntest.actions.run_and_verify_svn(None, [], expected_error, 'rm', sbox.repo_url, '--message', 'delete root')
svn commit: r1211859 - in /subversion/trunk/subversion: libsvn_client/delete.c tests/cmdline/basic_tests.py
Author: philip Date: Thu Dec 8 12:47:13 2011 New Revision: 1211859 URL: http://svn.apache.org/viewvc?rev=1211859&view=rev Log: Fix issue 4074, "svn rm root_url" SEGV. * subversion/libsvn_client/delete.c (delete_urls_multi_repos): Ensure we have a valid relpath. * subversion/tests/cmdline/basic_tests.py (basic_delete): Extend with new test case. Modified: subversion/trunk/subversion/libsvn_client/delete.c subversion/trunk/subversion/tests/cmdline/basic_tests.py Modified: subversion/trunk/subversion/libsvn_client/delete.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/delete.c?rev=1211859&r1=1211858&r2=1211859&view=diff == --- subversion/trunk/subversion/libsvn_client/delete.c (original) +++ subversion/trunk/subversion/libsvn_client/delete.c Thu Dec 8 12:47:13 2011 @@ -272,6 +272,12 @@ delete_urls_multi_repos(const apr_array_ APR_ARRAY_PUSH(relpaths_list, const char *) = repos_relpath; } + /* Check we identified a non-root relpath. Return an FS error + similar to the one further down. */ + if (!repos_relpath || !*repos_relpath) +return svn_error_createf(SVN_ERR_FS_NOT_FOUND, NULL, + "URL '%s' not within a repository root", uri); + /* Now, test to see if the thing actually exists. */ SVN_ERR(svn_ra_check_path(ra_session, repos_relpath, SVN_INVALID_REVNUM, &kind, pool)); Modified: subversion/trunk/subversion/tests/cmdline/basic_tests.py URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/cmdline/basic_tests.py?rev=1211859&r1=1211858&r2=1211859&view=diff == --- subversion/trunk/subversion/tests/cmdline/basic_tests.py (original) +++ subversion/trunk/subversion/tests/cmdline/basic_tests.py Thu Dec 8 12:47:13 2011 @@ -999,6 +999,7 @@ def verify_dir_deleted(path): return 1 +@Issue(687,4074) def basic_delete(sbox): "basic delete command" @@ -1190,6 +1191,12 @@ def basic_delete(sbox): 'rm', '-m', 'delete iota URL', iota_URL) + # Issue 4074, deleting a root url SEGV. + expected_error = 'svn: E160013: .*not within a repository root' + svntest.actions.run_and_verify_svn(None, [], expected_error, + 'rm', sbox.repo_url, + '--message', 'delete root') + #-- def basic_checkout_deleted(sbox):
svn commit: r1211813 - /subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
Author: philip Date: Thu Dec 8 10:42:45 2011 New Revision: 1211813 URL: http://svn.apache.org/viewvc?rev=1211813&view=rev Log: * subversion/tests/libsvn_wc/op-depth-test.c (move_on_move): Tweak comment. (move_on_move2): New test, a variation on move_on_move. (test_funcs): Add new XFAIL test. Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c?rev=1211813&r1=1211812&r2=1211813&view=diff == --- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Thu Dec 8 10:42:45 2011 @@ -4323,7 +4323,67 @@ move_on_move(const svn_test_opts_t *opts {1, "B2", "normal", 1, "A/B", MOVED_HERE}, {1, "B3", "normal", 1, "X/B", MOVED_HERE}, {1, "A","normal", 1, "X"}, + {1, "A/B", "normal", 1, "X/B"}, /* moved_to=B3? */ + {2, "A/B", "base-deleted", NO_COPY_FROM}, + {0} +}; +SVN_ERR(check_db_rows(&b, "", nodes)); + } + + return SVN_NO_ERROR; +} + +static svn_error_t * +move_on_move2(const svn_test_opts_t *opts, apr_pool_t *pool) +{ + svn_test__sandbox_t b; + + SVN_ERR(svn_test__sandbox_create(&b, "move_on_move2", opts, pool)); + + SVN_ERR(wc_mkdir(&b, "A")); + SVN_ERR(wc_mkdir(&b, "A/B")); + SVN_ERR(wc_mkdir(&b, "X")); + SVN_ERR(wc_mkdir(&b, "X/B")); + SVN_ERR(wc_commit(&b, "")); + SVN_ERR(wc_update(&b, "", 1)); + + SVN_ERR(wc_move(&b, "A", "A2")); + SVN_ERR(wc_delete(&b, "A")); + SVN_ERR(wc_copy(&b, "X", "A")); + + { +nodes_row_t nodes[] = { + {0, "", "normal", 1, ""}, + {0, "A","normal", 1, "A", FALSE, "A2"}, + {0, "A/B", "normal", 1, "A/B"}, + {0, "X","normal", 1, "X"}, + {0, "X/B", "normal", 1, "X/B"}, + {1, "A2", "normal", 1, "A", MOVED_HERE}, + {1, "A2/B", "normal", 1, "A/B", MOVED_HERE}, + {1, "A","normal", 1, "X"}, {1, "A/B", "normal", 1, "X/B"}, + {0} +}; +SVN_ERR(check_db_rows(&b, "", nodes)); + } + + /* A/B is already moved to A2/B but there is no explicit moved_to, + we derive it from A. The copy has given us another A/B that we + can move doing so stores explicit moved_to in A/B that breaks the + recording of the first move to A2/B. */ + SVN_ERR(wc_move(&b, "A/B", "B3")); + { +nodes_row_t nodes[] = { + {0, "", "normal", 1, ""}, + {0, "A","normal", 1, "A", FALSE, "A2"}, + {0, "A/B", "normal", 1, "A/B"}, /* XFAIL */ + {0, "X","normal", 1, "X"}, + {0, "X/B", "normal", 1, "X/B"}, + {1, "A2", "normal", 1, "A", MOVED_HERE}, + {1, "A2/B", "normal", 1, "A/B", MOVED_HERE}, + {1, "B3", "normal", 1, "X/B", MOVED_HERE}, + {1, "A","normal", 1, "X"}, + {1, "A/B", "normal", 1, "X/B"}, /* moved_to=B3? */ {2, "A/B", "base-deleted", NO_COPY_FROM}, {0} }; @@ -4419,5 +4479,7 @@ struct svn_test_descriptor_t test_funcs[ "revert_nested_move"), SVN_TEST_OPTS_XFAIL(move_on_move, "move_on_move"), +SVN_TEST_OPTS_XFAIL(move_on_move2, + "move_on_move2"), SVN_TEST_NULL };
svn commit: r1211792 - /subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c
Author: philip Date: Thu Dec 8 09:48:42 2011 New Revision: 1211792 URL: http://svn.apache.org/viewvc?rev=1211792&view=rev Log: * subversion/tests/libsvn_wc/op-depth-test.c (move_on_move): Simplify to avoid ambiguous XFAIL. Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Modified: subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c?rev=1211792&r1=1211791&r2=1211792&view=diff == --- subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/trunk/subversion/tests/libsvn_wc/op-depth-test.c Thu Dec 8 09:48:42 2011 @@ -4289,49 +4289,42 @@ move_on_move(const svn_test_opts_t *opts SVN_ERR(wc_commit(&b, "")); SVN_ERR(wc_update(&b, "", 1)); - SVN_ERR(wc_move(&b, "A/B", "A/B2")); - SVN_ERR(wc_move(&b, "A", "A2")); + SVN_ERR(wc_move(&b, "A/B", "B2")); + SVN_ERR(wc_delete(&b, "A")); SVN_ERR(wc_copy(&b, "X", "A")); { -/* Perhaps this should XFAIL on 1,A2/B,"normal" not being MOVED_HERE? */ nodes_row_t nodes[] = { {0, "", "normal", 1, ""}, - {0, "A","normal", 1, "A", FALSE, "A2"}, - {0, "A/B", "normal", 1, "A/B", FALSE, "A2/B2"}, + {0, "A","normal", 1, "A"}, + {0, "A/B", "normal", 1, "A/B", FALSE, "B2"}, {0, "X","normal", 1, "X"}, {0, "X/B", "normal", 1, "X/B"}, + {1, "B2", "normal", 1, "A/B", MOVED_HERE}, {1, "A","normal", 1, "X"}, {1, "A/B", "normal", 1, "X/B"}, - {1, "A2", "normal", 1, "A", MOVED_HERE}, - {1, "A2/B", "normal", 1, "A/B"}, - {2, "A2/B", "base-deleted", NO_COPY_FROM}, - {2, "A2/B2","normal", 1, "A/B", MOVED_HERE}, {0} }; SVN_ERR(check_db_rows(&b, "", nodes)); } - /* A/B to A2/B2 is already recorded in A/B but the copy has given us + /* A/B to B2 is already recorded in A/B but the copy has given us another A/B that we can move. A second move overwites the first move stored in A/B even though it's a different node being moved, - and that breaks the recording of the move to A2/B2. */ - SVN_ERR(wc_move(&b, "A/B", "A/B3")); + and that breaks the recording of the move to B2. */ + SVN_ERR(wc_move(&b, "A/B", "B3")); { nodes_row_t nodes[] = { {0, "", "normal", 1, ""}, - {0, "A","normal", 1, "A", FALSE, "A2"}, - {0, "A/B", "normal", 1, "A/B", FALSE, "A2/B2"}, /* XFAIL */ + {0, "A","normal", 1, "A"}, + {0, "A/B", "normal", 1, "A/B", FALSE, "B2"}, /* XFAIL */ {0, "X","normal", 1, "X"}, {0, "X/B", "normal", 1, "X/B"}, + {1, "B2", "normal", 1, "A/B", MOVED_HERE}, + {1, "B3", "normal", 1, "X/B", MOVED_HERE}, {1, "A","normal", 1, "X"}, {1, "A/B", "normal", 1, "X/B"}, - {1, "A2", "normal", 1, "A", MOVED_HERE}, - {1, "A2/B", "normal", 1, "A/B"}, - {2, "A2/B", "base-deleted", NO_COPY_FROM}, - {2, "A2/B2","normal", 1, "A/B", MOVED_HERE}, {2, "A/B", "base-deleted", NO_COPY_FROM}, - {2, "A/B3", "normal", 1, "X/B", MOVED_HERE}, {0} }; SVN_ERR(check_db_rows(&b, "", nodes));