subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From i...@apache.org
Subject svn commit: r1659777 [8/9] - in /subversion/branches/remove-log-addressing: ./ build/generator/ contrib/client-side/svncopy/ notes/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindings/java...
Date Sat, 14 Feb 2015 11:15:09 GMT
Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/dav-mirror-autocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/dav-mirror-autocheck.sh?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/dav-mirror-autocheck.sh (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/dav-mirror-autocheck.sh Sat Feb 14 11:15:05 2015
@@ -23,7 +23,7 @@
 # to the slave.  The test should be able to throw all kinds
 # of svn operations at one or the other, and master/slave
 # verified as identical in the end.
-# 
+#
 # Master / slave setup is achieved in a single httpd process
 # using virtual hosts bound to different addresses on the
 # loopback network (127.0.0.1, 127.0.0.2) for slave and
@@ -34,7 +34,7 @@
 # http://subversion.tigris.org/issues/show_bug.cgi?id=2939
 # But of course, any svn traffic liable to break over
 # mirroring would be a good addition.
-# 
+#
 # Most of the httpd setup was lifted from davautocheck.sh.
 # The common boilerplate snippets to setup/start/stop httpd
 # between the two could be factored out and shared.
@@ -95,7 +95,7 @@ function get_prog_name() {
   return 1
 }
 
-# splat out httpd config 
+# splat out httpd config
 function setup_config() {
 
   say "setting up config: " $1
@@ -152,7 +152,7 @@ CustomLog           "${HTTPD_ROOT}/ops"
   ServerName ${SLAVE_HOST}
   CustomLog           "${HTTPD_ROOT}/slave_access_log" common
   ErrorLog            "${HTTPD_ROOT}/slave_error_log"
-# slave 'normal' location  
+# slave 'normal' location
   <Location "/${SLAVE_LOCATION}">
     DAV               svn
     SVNPath           "${SLAVE_REPOS}"
@@ -196,7 +196,7 @@ function usage() {
   echo
   echo " " '<test-work-directory>' must not exist, \
     I will not clobber it for you 1>&2
-  exit 1  
+  exit 1
 }
 ### Start execution here ###
 
@@ -403,7 +403,7 @@ $SVNSYNC initialize --non-interactive "$
 #
 # reproducible test case from:
 # http://subversion.tigris.org/issues/show_bug.cgi?id=2939
-# 
+#
 BASE_URL="$SLAVE_URL"
 say running svnmucc test to $BASE_URL
 svnmucc="$SVNMUCC --non-interactive --username jrandom --password rayjandom -mm"
@@ -492,7 +492,7 @@ say "Some house-keeping..."
 say "Re-activating the post-commit hook on the master repo: $MASTER_REPOS."
 mv "$MASTER_REPOS/hooks/post-commit_" "$MASTER_REPOS/hooks/post-commit"
 say "Syncing slave with master."
-$SVNSYNC --non-interactive sync "$SYNC_URL" --username=svnsync --password=svnsync 
+$SVNSYNC --non-interactive sync "$SYNC_URL" --username=svnsync --password=svnsync
 # shut it down
 echo -n "${SCRIPT}: stopping httpd: "
 $HTTPD -f $HTTPD_CONFIG -k stop

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/davautocheck.sh
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/davautocheck.sh?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/davautocheck.sh (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/davautocheck.sh Sat Feb 14 11:15:05 2015
@@ -62,7 +62,7 @@
 # one version's client against another version's server) specify both APXS
 # *and* MODULE_PATH for the other server:
 #
-#   APXS=/opt/svn/1.4.x/bin/apxs MODULE_PATH=/opt/svn/1.4.x/modules \ 
+#   APXS=/opt/svn/1.4.x/bin/apxs MODULE_PATH=/opt/svn/1.4.x/modules \
 #     subversion/tests/cmdline/davautocheck.sh
 #
 # To prevent the server from advertising httpv2, pass USE_HTTPV1 in
@@ -71,7 +71,7 @@
 # To enable "SVNCacheRevProps on" set CACHE_REVPROPS in the environment.
 #
 # To test over https set USE_SSL in the environment.
-# 
+#
 # To use value for "SVNPathAuthz" directive set SVN_PATH_AUTHZ with
 # appropriate value in the environment.
 #
@@ -114,7 +114,7 @@ query() {
   if [ -n "$BASH_VERSION" ]; then
     read -n 1 -t 32
   else
-    # 
+    #
     prog="
 import select as s
 import sys
@@ -163,7 +163,7 @@ get_prog_name() {
 }
 
 # Don't assume sbin is in the PATH.
-# ### Presumably this is used to locate /usr/sbin/apxs or /usr/sbin/apache2    
+# ### Presumably this is used to locate /usr/sbin/apxs or /usr/sbin/apache2
 PATH="$PATH:/usr/sbin:/usr/local/sbin"
 
 # Find the source and build directories. The build dir can be found if it is

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/export_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/export_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/export_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/export_tests.py Sat Feb 14 11:15:05 2015
@@ -1016,18 +1016,18 @@ def export_file_external(sbox):
 @Issue(4427)
 def export_file_externals2(sbox):
   "exporting file externals"
-  
+
   sbox.build()
   sbox.simple_mkdir('DIR', 'DIR2')
-  
+
   sbox.simple_propset('svn:externals', '^/iota file', 'DIR')
   sbox.simple_propset('svn:externals', '^/DIR TheDir', 'DIR2')
   sbox.simple_commit()
   sbox.simple_update()
-  
+
   tmp = sbox.add_wc_path('tmp')
   os.mkdir(tmp)
-  
+
   expected_output = svntest.wc.State(tmp, {
     'file'          : Item(status='A '),
   })
@@ -1040,7 +1040,7 @@ def export_file_externals2(sbox):
                                         tmp,
                                         expected_output,
                                         expected_disk)
-  
+
   expected_output = svntest.wc.State(tmp, {
     'DIR/file'           : Item(status='A '),
   })
@@ -1052,7 +1052,7 @@ def export_file_externals2(sbox):
                                         os.path.join(tmp, 'DIR'),
                                         expected_output,
                                         expected_disk)
-                                        
+
   expected_output = svntest.wc.State(tmp, {
     'DIR2/TheDir/file' : Item(status='A '),
   })

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/externals_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/externals_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/externals_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/externals_tests.py Sat Feb 14 11:15:05 2015
@@ -3437,7 +3437,7 @@ def update_deletes_file_external(sbox):
   # As of r1448345, this update fails:
   # E000002: Can't remove directory '.../A_copy/C': No such file or directory
   sbox.simple_update()
-  
+
 
 @Issue(4519)
 def switch_relative_externals(sbox):
@@ -3541,6 +3541,339 @@ def replace_tree_with_foreign_external(s
                                         None, None, None, None, None, 1,
                                         '-r', '2', wc_dir)
 
+
+def verify_pinned_externals(sbox, external_url_for, base_path_or_url,
+                            external_youngest_rev, other_external_youngest_rev):
+  "helper for pin-externals tests"
+
+  expected_output = [
+    '%s@%d gamma\n' % (external_url_for["A/B/gamma"],
+                       external_youngest_rev),
+    '\n',
+  ]
+  if svntest.sandbox.is_url(base_path_or_url):
+    target = base_path_or_url + '/A_copy/B'
+  else:
+    target = sbox.ospath('A_copy/B')
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'propget', 'svn:externals',
+                                     target)
+  expected_output = [
+    'exdir_G -r%d %s\n' % (other_external_youngest_rev,
+                           external_url_for["A/C/exdir_G"]),
+    '%s exdir_H\n' % external_url_for["A/C/exdir_H"],
+    '\n',
+  ]
+  if svntest.sandbox.is_url(base_path_or_url):
+    target = base_path_or_url + '/A_copy/C'
+  else:
+    target = sbox.ospath('A_copy/C')
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'propget', 'svn:externals',
+                                     target)
+  expected_output = [
+    '%s@%d exdir_A\n' % (external_url_for["A/D/exdir_A"],
+                         other_external_youngest_rev),
+    '%s@%d exdir_A/G\n' % (external_url_for["A/D/exdir_A/G/"],
+                           other_external_youngest_rev),
+    'exdir_A/H -r1 %s\n' % external_url_for["A/D/exdir_A/H"],
+    '%s@%d x/y/z/blah\n' % (external_url_for["A/D/x/y/z/blah"],
+                            other_external_youngest_rev),
+    '\n',
+  ]
+  if svntest.sandbox.is_url(base_path_or_url):
+    target = base_path_or_url + '/A_copy/D'
+  else:
+    target = sbox.ospath('A_copy/D')
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'propget', 'svn:externals',
+                                     target)
+
+
+def copy_pin_externals_repos_repos(sbox):
+  "svn copy --pin-externals repos->repos"
+
+  external_url_for = externals_test_setup(sbox)
+
+  repo_url       = sbox.repo_url
+  repo_dir       = sbox.repo_dir
+  other_repo_dir = repo_dir + ".other"
+
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  other_external_youngest_rev = svntest.main.youngest(other_repo_dir)
+
+  # Perform a repos->repos copy, pinning externals
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'copy',
+                                     repo_url + '/A',
+                                     repo_url + '/A_copy',
+                                     '-m', 'copy',
+                                     '--pin-externals')
+  verify_pinned_externals(sbox, external_url_for, repo_url,
+                          external_youngest_rev, other_external_youngest_rev)
+
+
+def copy_pin_externals_repos_wc(sbox):
+  "svn copy --pin-externals repos->wc"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+  repo_dir       = sbox.repo_dir
+  other_repo_dir = repo_dir + ".other"
+
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  other_external_youngest_rev = svntest.main.youngest(other_repo_dir)
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  # Perform a repos->wc copy, pinning externals
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'copy',
+                                     repo_url + '/A',
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+  verify_pinned_externals(sbox, external_url_for, wc_dir,
+                          external_youngest_rev, other_external_youngest_rev)
+
+
+def copy_pin_externals_wc_repos(sbox):
+  "svn copy --pin-externals wc->repos"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+  repo_dir       = sbox.repo_dir
+  other_repo_dir = repo_dir + ".other"
+
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  other_external_youngest_rev = svntest.main.youngest(other_repo_dir)
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  # Perform a wc->repos copy, pinning externals
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'copy',
+                                     os.path.join(wc_dir, 'A'),
+                                     repo_url + '/A_copy',
+                                     '-m', 'copy',
+                                     '--pin-externals')
+  verify_pinned_externals(sbox, external_url_for, repo_url,
+                          external_youngest_rev, other_external_youngest_rev)
+
+
+def copy_pin_externals_wc_wc(sbox):
+  "svn copy --pin-externals wc->wc"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+  repo_dir       = sbox.repo_dir
+  other_repo_dir = repo_dir + ".other"
+
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  other_external_youngest_rev = svntest.main.youngest(other_repo_dir)
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  # Perform a wc->wc copy, pinning externals
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'copy',
+                                     os.path.join(wc_dir, 'A'),
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+  verify_pinned_externals(sbox, external_url_for, wc_dir,
+                          external_youngest_rev, other_external_youngest_rev)
+
+
+def copy_pin_externals_moved_external(sbox):
+  "pin externals which were moved since last changed"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+  repo_dir       = sbox.repo_dir
+  other_repo_dir = repo_dir + ".other"
+
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  other_external_youngest_rev = svntest.main.youngest(other_repo_dir)
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  # Test behaviour for external URLs which were moved since
+  # their last-changed revision.
+  sbox.simple_move('A/D/gamma', 'A/D/gamma-moved')
+  sbox.simple_commit()
+  change_external(sbox.ospath('A/B'), '^/A/D/gamma-moved gamma', commit=True)
+  sbox.simple_update()
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'copy',
+                                     os.path.join(wc_dir, 'A'),
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+  external_url_for["A/B/gamma"] = '^/A/D/gamma-moved'
+  verify_pinned_externals(sbox, external_url_for, wc_dir,
+                          external_youngest_rev, other_external_youngest_rev)
+
+
+def copy_pin_externals_removed_in_head(sbox):
+  "already pinned external which was removed in HEAD"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+  repo_dir       = sbox.repo_dir
+  other_repo_url = repo_url + ".other"
+  other_repo_dir = repo_dir + ".other"
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  # Test an already pinned external which was removed in HEAD.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'rm',
+                                     other_repo_url + '/A/D/H',
+                                     '-m', 'remove A/D/H')
+  sbox.simple_update()
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  other_external_youngest_rev = svntest.main.youngest(other_repo_dir)
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'copy',
+                                     os.path.join(wc_dir, 'A'),
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+  verify_pinned_externals(sbox, external_url_for, wc_dir,
+                          external_youngest_rev, other_external_youngest_rev)
+
+
+def copy_pin_externals_from_old_rev(sbox):
+  "copy from an old revision with pinning"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+  repo_dir       = sbox.repo_dir
+  other_repo_url = repo_url + ".other"
+  other_repo_dir = repo_dir + ".other"
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+  # Create a couple of revisions affecting 'A'.
+  for i in range(5):
+    svntest.main.file_append(sbox.ospath('A/mu'), 'a new line')
+    sbox.simple_commit()
+  sbox.simple_update()
+
+  # Test a copy from an old revision with pinning.
+  external_youngest_rev = svntest.main.youngest(repo_dir)
+  other_external_youngest_rev = svntest.main.youngest(other_repo_dir)
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'copy',
+                                     os.path.join(wc_dir, 'A@6'),
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+  external_url_for["A/B/gamma"] = '^/A/D/gamma'
+  verify_pinned_externals(sbox, external_url_for, wc_dir,
+                          external_youngest_rev, other_external_youngest_rev)
+
+
+def copy_pin_externals_wc_local_mods(sbox):
+  "cannot pin WC externals with local mods"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  svntest.main.file_append(sbox.ospath('A/C/exdir_G/pi'), 'this file changed')
+  expected_stderr = verify.RegexOutput(".*Cannot pin.*local modifications.*",
+                                       match_all=False)
+  svntest.actions.run_and_verify_svn(None, expected_stderr,
+                                     'copy',
+                                     os.path.join(wc_dir, 'A'),
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+
+
+def copy_pin_externals_wc_switched_subtrees(sbox):
+  "cannot pin WC externals with switched subtrees"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'switch', '--ignore-ancestry', '^/A/B',
+                                     sbox.ospath('A/D/exdir_A/C'))
+  expected_stderr = verify.RegexOutput(".*Cannot pin.*switched subtree.*",
+                                       match_all=False)
+  svntest.actions.run_and_verify_svn(None, expected_stderr,
+                                     'copy',
+                                     os.path.join(wc_dir, 'A'),
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+
+
+def copy_pin_externals_wc_mixed_revisions(sbox):
+  "cannot pin WC externals with mixed revisions"
+
+  external_url_for = externals_test_setup(sbox)
+
+  wc_dir         = sbox.wc_dir
+  repo_url       = sbox.repo_url
+
+  # Create a working copy.
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'checkout',
+                                     repo_url, wc_dir)
+
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'update', '-r1',
+                                     sbox.ospath('A/D/exdir_A/mu'))
+  expected_stderr = verify.RegexOutput(".*Cannot pin.*mixed-revision.*",
+                                       match_all=False)
+  svntest.actions.run_and_verify_svn(None, expected_stderr,
+                                     'copy',
+                                     os.path.join(wc_dir, 'A'),
+                                     os.path.join(wc_dir, 'A_copy'),
+                                     '--pin-externals')
+
+
 def nested_notification(sbox):
   "notification for nested externals"
 
@@ -3638,6 +3971,16 @@ test_list = [ None,
               switch_relative_externals,
               copy_file_external_to_repo,
               replace_tree_with_foreign_external,
+              copy_pin_externals_repos_repos,
+              copy_pin_externals_repos_wc,
+              copy_pin_externals_wc_repos,
+              copy_pin_externals_wc_wc,
+              copy_pin_externals_moved_external,
+              copy_pin_externals_removed_in_head,
+              copy_pin_externals_from_old_rev,
+              copy_pin_externals_wc_local_mods,
+              copy_pin_externals_wc_switched_subtrees,
+              copy_pin_externals_wc_mixed_revisions,
               nested_notification,
              ]
 

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/lock_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/lock_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/lock_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/lock_tests.py Sat Feb 14 11:15:05 2015
@@ -1841,8 +1841,8 @@ def commit_stolen_lock(sbox):
                                         err_re,
                                         wc_dir)
 
-# When removing directories, the locks of contained files were not 
-# correctly removed from the working copy database, thus they later 
+# When removing directories, the locks of contained files were not
+# correctly removed from the working copy database, thus they later
 # magically reappeared when new files or directories with the same
 # pathes were added.
 @Issue(4364)
@@ -1857,10 +1857,10 @@ def drop_locks_on_parent_deletion(sbox):
   sbox.simple_lock('A/B/E/alpha')
   sbox.simple_lock('A/B/E/beta')
   sbox.simple_rm('A/B')
-  
+
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.remove_subtree('A/B')
-  
+
   svntest.actions.run_and_verify_commit(wc_dir,
                                         [],
                                         expected_status,
@@ -1874,7 +1874,7 @@ def drop_locks_on_parent_deletion(sbox):
   # The bug also resurrected locks on directories when their path
   # matched a former file.
   sbox.simple_mkdir('A/B/E', 'A/B/E/alpha')
-    
+
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak('A/B',
                         'A/B/E',
@@ -1883,7 +1883,7 @@ def drop_locks_on_parent_deletion(sbox):
                         'A/B/lambda',
                         wc_rev='3')
   expected_status.remove('A/B/E/beta')
-   
+
   svntest.actions.run_and_verify_commit(wc_dir,
                                         [],
                                         expected_status,
@@ -2147,7 +2147,7 @@ def non_root_locks(sbox):
                                      'cp', sbox.repo_url, sbox.repo_url + '/X',
                                      '-m', 'copy greek tree')
 
-  sbox.simple_switch(sbox.repo_url + '/X')  
+  sbox.simple_switch(sbox.repo_url + '/X')
   expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
   svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
@@ -2336,20 +2336,20 @@ def lock_commit_bump(sbox):
   })
   expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_status.tweak('A/mu', wc_rev=3)
-  
+
   svntest.actions.run_and_verify_commit(wc_dir,
                                         expected_output,
                                         expected_status,
                                         None, wc_dir)
 
   # We explicitly check both the Revision and Last Changed Revision.
-  expected_infos = [ { 
+  expected_infos = [ {
     'Revision'           : '1' ,
     'Last Changed Rev'   : '1' ,
     'URL'                : '.*',
     'Lock Token'         : None, }
   ]
-  svntest.actions.run_and_verify_info(expected_infos, 
+  svntest.actions.run_and_verify_info(expected_infos,
                                       sbox.ospath('iota'))
 
 def copy_dir_with_locked_file(sbox):
@@ -2372,6 +2372,44 @@ def copy_dir_with_locked_file(sbox):
                                      'mv', A_url, AA2_url,
                                      '-m', '')
 
+@Issue(4557)
+@XFail(svntest.main.is_ra_type_dav)
+def delete_dir_with_lots_of_locked_files(sbox):
+  "delete a directory containing lots of locked files"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # A lot of paths.
+  nfiles = 75 # NOTE: test XPASSES with 50 files!!!
+  locked_paths = []
+  for i in range(nfiles):
+      locked_paths.append("A/locked_files/file-%i" % i)
+
+  # Create files at these paths
+  os.mkdir(sbox.ospath("A/locked_files"))
+  for file_path in locked_paths:
+    svntest.main.file_write(sbox.ospath(file_path), "This is a file\n")
+  sbox.simple_add("A/locked_files")
+  sbox.simple_commit()
+  sbox.simple_update()
+
+  # lock all the files
+  for file_path in locked_paths:
+    svntest.actions.run_and_verify_svn(None, [], 'lock',
+                                       '--username', 'jrandom',
+                                       '-m', 'lock %s' % file_path,
+                                       sbox.ospath(file_path))
+  # Locally delete A
+  sbox.simple_rm("A")
+
+  # Commit the deletion
+  # XFAIL: As of 1.8.10, this commit fails with:
+  #  svn: E175002: Unexpected HTTP status 400 'Bad Request' on '<path>'
+  # and the following error in the httpd error log:
+  #  request failed: error reading the headers
+  # This problem was introduced on the 1.8.x branch in r1606976.
+  sbox.simple_commit()
 
 ########################################################################
 # Run the tests
@@ -2438,6 +2476,7 @@ test_list = [ None,
               delete_locked_file_with_percent,
               lock_commit_bump,
               copy_dir_with_locked_file,
+              delete_dir_with_lots_of_locked_files,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tests.py Sat Feb 14 11:15:05 2015
@@ -18505,7 +18505,7 @@ def merge_to_empty_target_merge_to_infin
 
   C1_path = sbox.ospath('A/C/C1')
   test3_path = sbox.ospath('A/C/C1/test.txt')
-  
+
   # r3 - Add some subtrees:
   #   A /A/B/B1
   #   A /A/B/B1/B1a

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/merge_tree_conflict_tests.py Sat Feb 14 11:15:05 2015
@@ -1949,6 +1949,159 @@ def merge_replace_on_del_fails(sbox):
   actions.run_and_verify_svn2(expected_stdout, [], 0, 'merge',
     sbox.repo_url + '/A', branch_path)
 
+def merge_conflict_details(sbox):
+  "merge conflict details"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_append('A/B/E/new', 'new\n')
+  sbox.simple_add('A/B/E/new')
+  sbox.simple_append('A/B/E/alpha', '\nextra\nlines\n')
+  sbox.simple_rm('A/B/E/beta', 'A/B/F')
+  sbox.simple_propset('key', 'VAL', 'A/B/E', 'A/B')
+  sbox.simple_mkdir('A/B/E/new-dir1')
+  sbox.simple_mkdir('A/B/E/new-dir2')
+  sbox.simple_mkdir('A/B/E/new-dir3')
+  sbox.simple_rm('A/B/lambda')
+  sbox.simple_mkdir('A/B/lambda')
+  sbox.simple_commit()
+
+  sbox.simple_update('', 1)
+
+  sbox.simple_move('A/B', 'B')
+
+  sbox.simple_propset('key', 'vAl', 'B')
+  sbox.simple_move('B/E/beta', 'beta')
+  sbox.simple_propset('a', 'b', 'B/F', 'B/lambda')
+  sbox.simple_append('B/E/alpha', 'other\nnew\nlines')
+  sbox.simple_mkdir('B/E/new')
+  sbox.simple_mkdir('B/E/new-dir1')
+  sbox.simple_append('B/E/new-dir2', 'something')
+  sbox.simple_append('B/E/new-dir3', 'something')
+  sbox.simple_add('B/E/new-dir3')
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.add({
+    'B'                  : Item(status=' C', copied='+', moved_from='A/B',
+                                wc_rev='-', entry_status='AC'),
+    'B/E'                 : Item(status=' M', copied='+', wc_rev='-'),
+    'B/E/new'             : Item(status='A ', treeconflict='C', wc_rev='-'),
+    'B/E/beta'            : Item(status='D ', copied='+', treeconflict='C',
+                                 wc_rev='-', moved_to='beta'),
+    'B/E/alpha'           : Item(status='C ', copied='+', wc_rev='-'),
+    'B/E/new-dir3'        : Item(status='A ', treeconflict='C', wc_rev='-'),
+    'B/E/new-dir1'        : Item(status='A ', treeconflict='C', wc_rev='-'),
+    'B/F'                 : Item(status=' M', copied='+', treeconflict='C',
+                                 wc_rev='-'),
+    'B/lambda'            : Item(status=' M', copied='+', treeconflict='C',
+                                 wc_rev='-'),
+    'beta'                : Item(status='A ', copied='+',
+                                 moved_from='B/E/beta', wc_rev='-')
+  })
+  expected_status.tweak('A/B', status='D ', wc_rev='1', moved_to='B')
+  expected_status.tweak('A/B/lambda', 'A/B/E', 'A/B/E/beta', 'A/B/E/alpha',
+                        'A/B/F', status='D ')
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'B'                   : Item(status=' C'),
+    'B/E'                 : Item(status=' U'),
+    'B/E/new'             : Item(status='  ', treeconflict='C'),
+    'B/E/beta'            : Item(status='  ', treeconflict='C'),
+    'B/E/alpha'           : Item(status='C '),
+    'B/E/new-dir3'        : Item(status='  ', treeconflict='C'),
+    'B/E/new-dir1'        : Item(status='  ', treeconflict='C'),
+    'B/F'                 : Item(status='  ', treeconflict='C'),
+    'B/lambda'            : Item(status='  ', treeconflict='C'),
+  })
+  expected_skip = wc.State(wc_dir, {
+    'B/E/new-dir2'      : Item(verb='Skipped'),
+  })
+  svntest.actions.run_and_verify_merge(sbox.ospath('B'),
+                                       1, 2, '^/A/B', '^/A/B',
+                                       expected_output,
+                                       None, None,
+                                       None, None, expected_skip)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
+
+  expected_info = [
+    {
+      "Path" : re.escape(sbox.ospath('B')),
+
+      "Conflict Properties File" :
+            re.escape(sbox.ospath('B/dir_conflicts.prej')) + '.*',
+      "Conflict Details": re.escape(
+            'incoming dir edit upon merge' +
+            ' Source  left: (dir) ^/A/B@1' +
+            ' Source right: (dir) ^/A/B@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('B/E')),
+    },
+    {
+      "Path" : re.escape(sbox.ospath('B/E/alpha')),
+      "Conflict Previous Base File" : '.*alpha.*',
+      "Conflict Previous Working File" : '.*alpha.*',
+      "Conflict Current Base File": '.*alpha.*',
+      "Conflict Details": re.escape(
+          'incoming file edit upon merge' +
+          ' Source  left: (file) ^/A/B/E/alpha@1' +
+          ' Source right: (file) ^/A/B/E/alpha@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('B/E/beta')),
+      "Tree conflict": re.escape(
+          'local file moved away, incoming file delete or move upon merge' +
+          ' Source  left: (file) ^/A/B/E/beta@1' +
+          ' Source right: (none) ^/A/B/E/beta@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('B/E/new')),
+      "Tree conflict": re.escape(
+          'local dir add, incoming file add upon merge' +
+          ' Source  left: (none) ^/A/B/E/new@1' +
+          ' Source right: (file) ^/A/B/E/new@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('B/E/new-dir1')),
+      "Tree conflict": re.escape(
+          'local dir add, incoming dir add upon merge' +
+          ' Source  left: (none) ^/A/B/E/new-dir1@1' +
+          ' Source right: (dir) ^/A/B/E/new-dir1@2')
+    },
+    #{ ### Skipped
+    #  "Path" : re.escape(sbox.ospath('B/E/new-dir2')),
+    #  "Tree conflict": re.escape(
+    #      'local file unversioned, incoming dir add upon merge' +
+    #      ' Source  left: (none) ^/A/B/E/new-dir2@1' +
+    #      ' Source right: (dir) ^/A/B/E/new-dir2@2')
+    #},
+    {
+      "Path" : re.escape(sbox.ospath('B/E/new-dir3')),
+      "Tree conflict": re.escape(
+          'local file add, incoming dir add upon merge' +
+          ' Source  left: (none) ^/A/B/E/new-dir3@1' +
+          ' Source right: (dir) ^/A/B/E/new-dir3@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('B/F')),
+      "Tree conflict": re.escape(
+          'local dir edit, incoming dir delete or move upon merge' +
+          ' Source  left: (dir) ^/A/B/F@1' +
+          ' Source right: (none) ^/A/B/F@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('B/lambda')),
+      "Tree conflict": re.escape(
+          'local file edit, incoming replace with dir upon merge' +
+          ' Source  left: (file) ^/A/B/lambda@1' +
+          ' Source right: (dir) ^/A/B/lambda@2')
+    },
+  ]
+
+  svntest.actions.run_and_verify_info(expected_info, sbox.ospath('B'),
+                                      '--depth', 'infinity')
+
 ########################################################################
 # Run the tests
 
@@ -1979,6 +2132,7 @@ test_list = [ None,
               merge_replace_causes_tree_conflict,
               merge_replace_causes_tree_conflict2,
               merge_replace_on_del_fails,
+              merge_conflict_details,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/move_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/move_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/move_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/move_tests.py Sat Feb 14 11:15:05 2015
@@ -1373,7 +1373,7 @@ def move_many_update_delete(sbox):
   svntest.actions.run_and_verify_update(wc_dir, expected_output, None,
                                         expected_status)
 
-  # Would be nice if we could run the resolver as a separate step, 
+  # Would be nice if we could run the resolver as a separate step,
   # but 'svn resolve' just fails for any value but working
 
 def move_many_update_add(sbox):
@@ -1483,7 +1483,7 @@ def copy_move_commit(sbox):
     #     create table bbb (Id int not null)
     #   - Commit
     # Repro Issue 2
-    #    - Copy folder aaa under same parent folder (i.e. as a sibling). (using Ctrl drag/drop). 
+    #    - Copy folder aaa under same parent folder (i.e. as a sibling). (using Ctrl drag/drop).
     #      Creates Copy of aaa
     #    - Rename Copy of aaa to eee
     #    - Commit
@@ -1512,7 +1512,7 @@ def move_to_from_external(sbox):
                                      'move',
                                      sbox.ospath('iota'),
                                      sbox.ospath('GG/tau'))
-                                     
+
   svntest.actions.run_and_verify_svn(None, [],
                                      'ci', '-m', 'Commit both',
                                      sbox.ospath(''),
@@ -1633,10 +1633,9 @@ def move_conflict_details(sbox):
   expected_info = [
     {
       "Path" : re.escape(sbox.ospath('B')),
-      
+
       "Conflict Properties File" :
-            re.escape(os.path.abspath(sbox.ospath('B/dir_conflicts.prej'))) +
-            '.*',
+            re.escape(sbox.ospath('B/dir_conflicts.prej')) + '.*',
       "Conflict Details": re.escape(
             'incoming dir edit upon update' +
             ' Source  left: (dir) ^/A/B@1' +

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/redirect_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/redirect_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/redirect_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/redirect_tests.py Sat Feb 14 11:15:05 2015
@@ -154,7 +154,7 @@ def redirected_nonroot_update(sbox):
                                              checkout_url, wc_dir)
   if err:
     raise svntest.Failure
-  
+
   # Relocate (by cheating) the working copy to the redirect URL.  When
   # we then update, we'll expect to find ourselves automagically back
   # to the original URL.  (This is because we can't easily introduce a
@@ -241,6 +241,25 @@ def redirected_copy(sbox):
                                      sbox.redirected_root_url(temporary=True) + '/A',
                                      '^/copy-of-A')
 #----------------------------------------------------------------------
+@SkipUnless(svntest.main.is_ra_type_dav)
+def redirected_commands(sbox):
+  "redirected commands"
+
+  sbox.build(create_wc=False)
+
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'log',
+                                     sbox.redirected_root_url() + '/A')
+
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'ls',
+                                     sbox.redirected_root_url() + '/A')
+
+  svntest.actions.run_and_verify_svn(None, [],
+                                     'info',
+                                     sbox.redirected_root_url() + '/A')
+
+#----------------------------------------------------------------------
 
 ########################################################################
 # Run the tests
@@ -253,6 +272,7 @@ test_list = [ None,
               redirected_nonroot_update,
               redirected_externals,
               redirected_copy,
+              redirected_commands,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/stat_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/stat_tests.py Sat Feb 14 11:15:05 2015
@@ -2093,12 +2093,12 @@ def status_path_handling(sbox):
 
 def status_move_missing_direct(sbox):
   "move information when status is called directly"
-  
+
   sbox.build()
   sbox.simple_copy('A', 'Z')
   sbox.simple_commit('')
   sbox.simple_update('')
-  
+
   sbox.simple_move('Z', 'ZZ')
   sbox.simple_move('A', 'Z')
   sbox.simple_move('Z/B', 'ZB')
@@ -2108,14 +2108,14 @@ def status_move_missing_direct(sbox):
   # Somehow 'svn status' now shows different output for 'ZB/E'
   # when called directly and via an ancestor, as this handles
   # multi-layer in a different way
-  
+
   # Note that the status output may change over different Subversion revisions,
   # but the status on a node should be identical anyway 'svn status' is called
   # on it.
-  
+
   expected_output = [
     'A  +    %s\n' % sbox.ospath('ZB'),
-    '        > moved from %s\n' % os.path.join('..', 'Z', 'B'),    
+    '        > moved from %s\n' % os.path.join('..', 'Z', 'B'),
     'D  +    %s\n' % sbox.ospath('ZB/E'),
     '        > moved to %s\n' % os.path.join('..', 'Z', 'B', 'E'),
   ]
@@ -2133,7 +2133,7 @@ def status_move_missing_direct(sbox):
 
 def status_move_missing_direct_base(sbox):
   "move when status is called directly with base"
-  
+
   sbox.build()
   sbox.simple_copy('A', 'Z')
   sbox.simple_mkdir('Q')
@@ -2141,10 +2141,10 @@ def status_move_missing_direct_base(sbox
   sbox.simple_mkdir('Q/ZB/E')
   sbox.simple_commit('')
   sbox.simple_update('')
-  
+
   sbox.simple_rm('Q')
   sbox.simple_mkdir('Q')
-  
+
   sbox.simple_move('Z', 'ZZ')
   sbox.simple_move('A', 'Z')
   sbox.simple_move('Z/B', 'Q/ZB')
@@ -2154,14 +2154,14 @@ def status_move_missing_direct_base(sbox
   # Somehow 'svn status' now shows different output for 'Q/ZB/E'
   # when called directly and via an ancestor, as this handles
   # multi-layer in a different way
-  
+
   # Note that the status output may change over different Subversion revisions,
   # but the status on a node should be identical anyway 'svn status' is called
   # on it.
-  
+
   # This test had a different result as status_move_missing_direct at the time of
   # writing this test.
-  
+
   expected_output = [
     'A  +    %s\n' % sbox.ospath('Q/ZB'),
     '        > moved from %s\n' % os.path.join('..', '..', 'Z', 'B'),

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/svnadmin_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/svnadmin_tests.py Sat Feb 14 11:15:05 2015
@@ -82,6 +82,10 @@ def check_hotcopy_fsfs_fsx(src, dst):
         if dst_dirent == 'write-lock':
           continue
 
+        # Ignore auto-created rep-cache.db-journal file
+        if dst_dirent == 'rep-cache.db-journal':
+          continue
+
         src_dirent = os.path.join(src_dirpath, dst_dirent)
         if not os.path.exists(src_dirent):
           raise svntest.Failure("%s does not exist in hotcopy "
@@ -96,6 +100,10 @@ def check_hotcopy_fsfs_fsx(src, dst):
         if src_file == 'write-lock':
           continue
 
+        # Ignore auto-created rep-cache.db-journal file
+        if src_file == 'rep-cache.db-journal':
+          continue
+
         src_path = os.path.join(src_dirpath, src_file)
         dst_path = os.path.join(dst_dirpath, src_file)
         if not os.path.isfile(dst_path):
@@ -179,7 +187,7 @@ def check_hotcopy_fsfs(src, dst):
 def check_hotcopy_fsx(src, dst):
     "Verify that the SRC FSX repository has been correctly copied to DST."
     check_hotcopy_fsfs_fsx(src, dst)
-        
+
 #----------------------------------------------------------------------
 
 # How we currently test 'svnadmin' --
@@ -1952,7 +1960,7 @@ def verify_keep_going(sbox):
   svntest.actions.run_and_verify_svn(None, [],
                                      'mkdir', '-m', 'log_msg',
                                      C_url)
-  
+
   r2 = fsfs_file(sbox.repo_dir, 'revs', '2')
   fp = open(r2, 'r+b')
   fp.write("""inserting junk to corrupt the rev""")

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/actions.py Sat Feb 14 11:15:05 2015
@@ -1019,19 +1019,20 @@ def run_and_verify_info(expected_infos,
 
     for actual, expected in zip(actual_infos, expected_infos):
       # compare dicts
+      path = actual['Path']
       for key, value in expected.items():
         assert ':' not in key # caller passed impossible expectations?
         if value is None and key in actual:
-          raise main.SVNLineUnequal("Found unexpected key '%s' with value '%s'"
-                                    % (key, actual[key]))
+          raise main.SVNLineUnequal("On '%s': Found unexpected key '%s'\n  Value '%s'"
+                                    % (path, key, actual[key]))
         if value is not None and key not in actual:
-          raise main.SVNLineUnequal("Expected key '%s' (with value '%s') "
-                                    "not found" % (key, value))
+          raise main.SVNLineUnequal("On '%s': Expected key '%s' not found\n Expected value '%s'"
+                                    % (path, key, value))
         if value is not None and not re.match(value, actual[key]):
-          raise verify.SVNUnexpectedStdout("Values of key '%s' don't match:\n"
+          raise verify.SVNUnexpectedStdout("On '%s': Values of key '%s' don't match:\n"
                                            "  Expected: '%s' (regex)\n"
                                            "  Found:    '%s' (string)\n"
-                                           % (key, value, actual[key]))
+                                           % (path, key, value, actual[key]))
 
   except:
     sys.stderr.write("Bad 'svn info' output:\n"

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/switch_tests.py Sat Feb 14 11:15:05 2015
@@ -2121,7 +2121,7 @@ def tree_conflicts_on_switch_1_1(sbox):
     'DDF/D1/D2'         : Item(status='  ', treeconflict='U'),
     'DDF/D1/D2/gamma'   : Item(status='  ', treeconflict='U')
   })
-  
+
   expected_disk = svntest.wc.State('', {
   'F'               : Item(),
   'D'               : Item(),

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/update_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/update_tests.py?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/update_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/update_tests.py Sat Feb 14 11:15:05 2015
@@ -6697,6 +6697,146 @@ def update_child_below_add(sbox):
                                         None, None, None,
                                         sbox.ospath('A/B/E'))
 
+def update_conflict_details(sbox):
+  "update conflict details"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  sbox.simple_append('A/B/E/new', 'new\n')
+  sbox.simple_add('A/B/E/new')
+  sbox.simple_append('A/B/E/alpha', '\nextra\nlines\n')
+  sbox.simple_rm('A/B/E/beta', 'A/B/F')
+  sbox.simple_propset('key', 'VAL', 'A/B/E', 'A/B')
+  sbox.simple_mkdir('A/B/E/new-dir1')
+  sbox.simple_mkdir('A/B/E/new-dir2')
+  sbox.simple_mkdir('A/B/E/new-dir3')
+  sbox.simple_rm('A/B/lambda')
+  sbox.simple_mkdir('A/B/lambda')
+  sbox.simple_commit()
+
+  sbox.simple_update('', 1)
+
+  sbox.simple_propset('key', 'vAl', 'A/B')
+  sbox.simple_move('A/B/E/beta', 'beta')
+  sbox.simple_propset('a', 'b', 'A/B/F', 'A/B/lambda')
+  sbox.simple_append('A/B/E/alpha', 'other\nnew\nlines')
+  sbox.simple_mkdir('A/B/E/new')
+  sbox.simple_mkdir('A/B/E/new-dir1')
+  sbox.simple_append('A/B/E/new-dir2', 'something')
+  sbox.simple_append('A/B/E/new-dir3', 'something')
+  sbox.simple_add('A/B/E/new-dir3')
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
+  expected_status.add({
+    'A/B/E/new'         : Item(status='R ', treeconflict='C', wc_rev='2'),
+    'A/B/E/new-dir2'    : Item(status='D ', treeconflict='C', wc_rev='2'),
+    'A/B/E/new-dir3'    : Item(status='R ', treeconflict='C', wc_rev='2'),
+    'A/B/E/new-dir1'    : Item(status='  ', wc_rev='2'),
+    'A/C'               : Item(status='  ', wc_rev='2'),
+    'iota'              : Item(status='  ', wc_rev='2'),
+    'beta'              : Item(status='A ', copied='+', wc_rev='-')
+  })
+  expected_status.tweak('A/B', status=' C', wc_rev='2')
+  expected_status.tweak('A/B/E/alpha', status='C ', wc_rev='2')
+  expected_status.tweak('A/B/E/beta', status='! ', treeconflict='C', wc_rev=None)
+  expected_status.tweak('A/B/F', status='A ', copied='+', treeconflict='C', wc_rev='-')
+  expected_status.tweak('A/B/lambda', status='RM', copied='+', treeconflict='C', wc_rev='-')
+  expected_status.tweak('A/mu', status='  ', wc_rev='2')
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/B'               : Item(status=' C'),
+    'A/B/E'             : Item(status=' U'),
+    'A/B/E/new'         : Item(status='  ', treeconflict='C'),
+    'A/B/E/beta'        : Item(status='  ', treeconflict='C'),
+    'A/B/E/alpha'       : Item(status='C '),
+    'A/B/E/new-dir2'    : Item(status='  ', treeconflict='C'),
+    'A/B/E/new-dir3'    : Item(status='  ', treeconflict='C'),
+    'A/B/E/new-dir1'    : Item(status='E '),
+    'A/B/F'             : Item(status='  ', treeconflict='C'),
+    # ### 2 tree conflict reports; one for delete; one for add...
+    'A/B/lambda'        : Item(status='  ', treeconflict='A',
+                               prev_status='  ', prev_treeconflict='C'),
+  })
+  svntest.actions.run_and_verify_update(wc_dir, expected_output,
+                                        None, expected_status)
+
+  # Update can't pass source as none at a specific URL@revision,
+  # because it doesn't know... the working copy could be mixed
+  # revision or may have excluded parts...
+  expected_info = [
+    {
+      "Path" : re.escape(sbox.ospath('A/B')),
+
+      "Conflict Properties File" :
+            re.escape(sbox.ospath('A/B/dir_conflicts.prej')) + '.*',
+      "Conflict Details": re.escape(
+            'incoming dir edit upon update' +
+            ' Source  left: (dir) ^/A/B@1' +
+            ' Source right: (dir) ^/A/B@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/E')),
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/E/alpha')),
+      "Conflict Previous Base File" : '.*alpha.*',
+      "Conflict Previous Working File" : '.*alpha.*',
+      "Conflict Current Base File": '.*alpha.*',
+      "Conflict Details": re.escape(
+          'incoming file edit upon update' +
+          ' Source  left: (file) ^/A/B/E/alpha@1' +
+          ' Source right: (file) ^/A/B/E/alpha@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/E/beta')),
+      "Tree conflict": re.escape(
+          'local file moved away, incoming file delete or move upon update' +
+          ' Source  left: (file) ^/A/B/E/beta@1' +
+          ' Source right: (none) ^/A/B/E/beta@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/E/new')),
+      "Tree conflict": re.escape(
+          'local dir add, incoming file add upon update' +
+          ' Source  left: (none)' +
+          ' Source right: (file) ^/A/B/E/new@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/E/new-dir1')),
+      # No tree conflict. Existing directory taken over
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/E/new-dir2')),
+      "Tree conflict": re.escape(
+          'local file unversioned, incoming dir add upon update' +
+          ' Source  left: (none)' +
+          ' Source right: (dir) ^/A/B/E/new-dir2@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/E/new-dir3')),
+      "Tree conflict": re.escape(
+          'local file add, incoming dir add upon update' +
+          ' Source  left: (none)' +
+          ' Source right: (dir) ^/A/B/E/new-dir3@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/F')),
+      "Tree conflict": re.escape(
+          'local dir edit, incoming dir delete or move upon update' +
+          ' Source  left: (dir) ^/A/B/F@1' +
+          ' Source right: (none) ^/A/B/F@2')
+    },
+    {
+      "Path" : re.escape(sbox.ospath('A/B/lambda')),
+      "Tree conflict": re.escape(
+          'local file edit, incoming replace with dir upon update' +
+          ' Source  left: (file) ^/A/B/lambda@1' +
+          ' Source right: (dir) ^/A/B/lambda@2')
+    },
+  ]
+
+  svntest.actions.run_and_verify_info(expected_info, sbox.ospath('A/B'),
+                                      '--depth', 'infinity')
 
 #######################################################################
 # Run the tests
@@ -6783,6 +6923,7 @@ test_list = [ None,
               update_moved_away,
               bump_below_tree_conflict,
               update_child_below_add,
+              update_conflict_details,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/client-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/client-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/client-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/client-test.c Sat Feb 14 11:15:05 2015
@@ -35,6 +35,8 @@
 #include "svn_repos.h"
 #include "svn_subst.h"
 #include "private/svn_wc_private.h"
+#include "svn_props.h"
+#include "svn_hash.h"
 
 #include "../svn_test.h"
 #include "../svn_test_fs.h"
@@ -1055,6 +1057,236 @@ test_remote_only_status(const svn_test_o
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_copy_pin_externals(const svn_test_opts_t *opts,
+                        apr_pool_t *pool)
+{
+  svn_opt_revision_t rev;
+  svn_opt_revision_t peg_rev;
+  const char *repos_url;
+  const char *A_url;
+  const char *A_copy_url;
+  const char *wc_path;
+  svn_client_ctx_t *ctx;
+  const svn_string_t *propval;
+  apr_hash_t *externals_to_pin;
+  apr_array_header_t *external_items;
+  apr_array_header_t *copy_sources;
+  svn_wc_external_item2_t items[6];
+  svn_client_copy_source_t copy_source;
+  apr_hash_t *props;
+  apr_array_header_t *pinned_externals_descs;
+  apr_array_header_t *pinned_externals;
+  int i;
+  int num_tested_externals;
+  svn_stringbuf_t *externals_test_prop;
+  struct pin_externals_test_data {
+    const char *src_external_desc;
+    const char *expected_dst_external_desc;
+  } pin_externals_test_data[] = {
+    { "^/A/D/gamma B/gamma",    "^/A/D/gamma@2 B/gamma" },
+    { "-r1 ^/A/D/G C/exdir_G",  "-r1 ^/A/D/G C/exdir_G" },
+    { "^/A/D/H@1 C/exdir_H",    "^/A/D/H@1 C/exdir_H"  },
+    { "^/A/D/H C/exdir_H2",     "^/A/D/H@2 C/exdir_H2" },
+    { "-r1 ^/A/B D/z/y/z/blah", "-r1 ^/A/B@2 D/z/y/z/blah" } ,
+    { "-r1 ^/A/D@2 exdir_D", "-r1 ^/A/D@2 exdir_D" },
+    /* Dated revision should retain their date string exactly. */
+    { "-r{1970-01-01T00:00} ^/A/C 70s", "-r{1970-01-01T00:00} ^/A/C@2 70s"},
+    { "-r{2004-02-23} ^/svn 1.0", "-r{2004-02-23} ^/svn 1.0"},
+    { NULL },
+  };
+
+  /* Create a filesytem and repository containing the Greek tree. */
+  SVN_ERR(create_greek_repos(&repos_url, "pin-externals", opts, pool));
+
+  wc_path = svn_test_data_path("pin-externals-working-copy", pool);
+
+  /* Remove old test data from the previous run */
+  SVN_ERR(svn_io_remove_dir2(wc_path, TRUE, NULL, NULL, pool));
+
+  SVN_ERR(svn_io_make_dir_recursively(wc_path, pool));
+  svn_test_add_dir_cleanup(wc_path);
+
+  rev.kind = svn_opt_revision_head;
+  peg_rev.kind = svn_opt_revision_unspecified;
+  SVN_ERR(svn_client_create_context(&ctx, pool));
+
+  /* Configure some externals on ^/A */
+  i = 0;
+  externals_test_prop = svn_stringbuf_create_empty(pool);
+  while (pin_externals_test_data[i].src_external_desc)
+    {
+      svn_stringbuf_appendcstr(externals_test_prop,
+                               pin_externals_test_data[i].src_external_desc);
+      svn_stringbuf_appendbyte(externals_test_prop, '\n');
+      i++;
+    }
+  propval = svn_string_create_from_buf(externals_test_prop, pool);
+  A_url = apr_pstrcat(pool, repos_url, "/A", SVN_VA_NULL);
+  SVN_ERR(svn_client_propset_remote(SVN_PROP_EXTERNALS, propval,
+                                    A_url, TRUE, 1, NULL,
+                                    NULL, NULL, ctx, pool));
+
+  /* Set up parameters for pinning some externals. */
+  externals_to_pin = apr_hash_make(pool);
+
+  items[0].url = "^/A/D/gamma";
+  items[0].target_dir = "B/gamma";
+  items[1].url = "^/A/B";
+  items[1].target_dir = "D/z/y/z/blah";
+  items[2].url = "^/A/D/H";
+  items[2].target_dir = "C/exdir_H2";
+  items[3].url= "^/A/D";
+  items[3].target_dir= "exdir_D";
+  items[4].url = "^/A/C";
+  items[4].target_dir = "70s";
+  /* Also add an entry which doesn't match any actual definition. */
+  items[5].url = "^/this/does/not/exist";
+  items[5].target_dir = "in/test/data";
+
+  external_items = apr_array_make(pool, 2, sizeof(svn_wc_external_item2_t *));
+  for (i = 0; i < sizeof(items) / sizeof(items[0]); i++)
+    APR_ARRAY_PUSH(external_items, svn_wc_external_item2_t *) = &items[i];
+  svn_hash_sets(externals_to_pin, A_url, external_items);
+
+  /* Copy ^/A to ^/A_copy, pinning two non-pinned externals. */
+  copy_source.path = A_url;
+  copy_source.revision = &rev;
+  copy_source.peg_revision = &peg_rev;
+  copy_sources = apr_array_make(pool, 1, sizeof(svn_client_copy_source_t *));
+  APR_ARRAY_PUSH(copy_sources, svn_client_copy_source_t *) = &copy_source;
+  A_copy_url = apr_pstrcat(pool, repos_url, "/A_copy", SVN_VA_NULL);
+  SVN_ERR(svn_client_copy7(copy_sources, A_copy_url, FALSE, FALSE,
+                           FALSE, TRUE, externals_to_pin,
+                           NULL, NULL, NULL, ctx, pool));
+
+  /* Verify that externals were pinned as expected. */
+  SVN_ERR(svn_client_propget5(&props, NULL, SVN_PROP_EXTERNALS,
+                              A_copy_url, &peg_rev, &rev, NULL,
+                              svn_depth_empty, NULL, ctx, pool, pool));
+  propval = svn_hash_gets(props, A_copy_url);
+  SVN_TEST_ASSERT(propval);
+
+  /* Test the unparsed representation of copied externals descriptions. */
+  pinned_externals_descs = svn_cstring_split(propval->data, "\n", FALSE, pool);
+  for (i = 0; i < pinned_externals_descs->nelts; i++)
+    {
+      const char *externals_desc;
+      const char *expected_desc;
+
+      externals_desc = APR_ARRAY_IDX(pinned_externals_descs, i, const char *);
+      expected_desc = pin_externals_test_data[i].expected_dst_external_desc;
+      SVN_TEST_STRING_ASSERT(externals_desc, expected_desc);
+    }
+  /* Ensure all test cases were tested. */
+  SVN_TEST_ASSERT(i == (sizeof(pin_externals_test_data) /
+                        sizeof(pin_externals_test_data[0]) - 1));
+
+  SVN_ERR(svn_wc_parse_externals_description3(&pinned_externals, A_copy_url,
+                                              propval->data, TRUE, pool));
+
+  /* For completeness, test the parsed representation, too */
+  num_tested_externals = 0;
+  for (i = 0; i < pinned_externals->nelts; i++)
+    {
+      svn_wc_external_item2_t *item;
+
+      item = APR_ARRAY_IDX(pinned_externals, i, svn_wc_external_item2_t *);
+      if (strcmp(item->url, "^/A/D/gamma") == 0)
+        {
+          SVN_TEST_STRING_ASSERT(item->target_dir, "B/gamma");
+          /* Pinned to r2. */
+          SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->revision.value.number == 2);
+          SVN_TEST_ASSERT(item->peg_revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->peg_revision.value.number == 2);
+          num_tested_externals++;
+        }
+      else if (strcmp(item->url, "^/A/D/G") == 0)
+        {
+          SVN_TEST_STRING_ASSERT(item->target_dir, "C/exdir_G");
+          /* Not pinned. */
+          SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->revision.value.number == 1);
+          SVN_TEST_ASSERT(item->peg_revision.kind == svn_opt_revision_head);
+          num_tested_externals++;
+        }
+      else if (strcmp(item->url, "^/A/D/H") == 0)
+        {
+          if (strcmp(item->target_dir, "C/exdir_H") == 0)
+            {
+              /* Was already pinned to r1. */
+              SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_number);
+              SVN_TEST_ASSERT(item->revision.value.number == 1);
+              SVN_TEST_ASSERT(item->peg_revision.kind ==
+                              svn_opt_revision_number);
+              SVN_TEST_ASSERT(item->peg_revision.value.number == 1);
+              num_tested_externals++;
+            }
+          else if (strcmp(item->target_dir, "C/exdir_H2") == 0)
+            {
+              /* Pinned to r2. */
+              SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_number);
+              SVN_TEST_ASSERT(item->revision.value.number == 2);
+              SVN_TEST_ASSERT(item->peg_revision.kind ==
+                              svn_opt_revision_number);
+              SVN_TEST_ASSERT(item->peg_revision.value.number == 2);
+              num_tested_externals++;
+            }
+          else
+            SVN_TEST_ASSERT(FALSE); /* unknown external */
+        }
+      else if (strcmp(item->url, "^/A/B") == 0)
+        {
+          SVN_TEST_STRING_ASSERT(item->target_dir, "D/z/y/z/blah");
+          /* Pinned to r2. */
+          SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->revision.value.number == 1);
+          SVN_TEST_ASSERT(item->peg_revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->peg_revision.value.number == 2);
+          num_tested_externals++;
+        }
+      else if (strcmp(item->url, "^/A/D") == 0)
+        {
+          SVN_TEST_STRING_ASSERT(item->target_dir, "exdir_D");
+          /* Pinned to r2. */
+          SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->revision.value.number == 1);
+          SVN_TEST_ASSERT(item->peg_revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->peg_revision.value.number == 2);
+          num_tested_externals++;
+        }
+      else if (strcmp(item->url, "^/A/C") == 0)
+        {
+          SVN_TEST_STRING_ASSERT(item->target_dir, "70s");
+          /* Pinned to r2. */
+          SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_date);
+          /* Don't bother testing the exact date value here. */
+          SVN_TEST_ASSERT(item->peg_revision.kind == svn_opt_revision_number);
+          SVN_TEST_ASSERT(item->peg_revision.value.number == 2);
+          num_tested_externals++;
+        }
+      else if (strcmp(item->url, "^/svn") == 0)
+        {
+          SVN_TEST_STRING_ASSERT(item->target_dir, "1.0");
+          /* Was and not in externals_to_pin, operative revision was a date. */
+          SVN_TEST_ASSERT(item->revision.kind == svn_opt_revision_date);
+          /* Don't bother testing the exact date value here. */
+          SVN_TEST_ASSERT(item->peg_revision.kind == svn_opt_revision_head);
+          num_tested_externals++;
+        }
+      else
+        SVN_TEST_ASSERT(FALSE); /* unknown URL */
+    }
+
+  /* Ensure all test cases were tested. */
+  SVN_TEST_ASSERT(num_tested_externals == (sizeof(pin_externals_test_data) /
+                                           sizeof(pin_externals_test_data[0])
+                                          - 1));
+
+  return SVN_NO_ERROR;
+}
+
 /* ========================================================================== */
 
 
@@ -1079,6 +1311,8 @@ static struct svn_test_descriptor_t test
                        "test svn_client_suggest_merge_sources"),
     SVN_TEST_OPTS_PASS(test_remote_only_status,
                        "test svn_client_status6 with ignore_local_mods"),
+    SVN_TEST_OPTS_PASS(test_copy_pin_externals,
+                       "test svn_client_copy7 with externals_to_pin"),
     SVN_TEST_NULL
   };
 

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/mtcc-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/mtcc-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/mtcc-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_client/mtcc-test.c Sat Feb 14 11:15:05 2015
@@ -614,7 +614,7 @@ test_file_revs_both_ways(const svn_test_
                                 handle_rev, &hrb,
                                 subpool));
   SVN_TEST_ASSERT(hrb.last == 6);
-  
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/fs-test.c Sat Feb 14 11:15:05 2015
@@ -5136,7 +5136,7 @@ filename_trailing_newline(const svn_test
     SVN_TEST_ASSERT(err == SVN_NO_ERROR);
   else
     SVN_TEST_ASSERT_ERROR(err, SVN_ERR_FS_PATH_SYNTAX);
-  
+
 
   /* Create another file, with contents. */
   if (!legacy_backend)
@@ -5314,7 +5314,7 @@ test_compat_version(const svn_test_opts_
 {
   svn_version_t *compatible_version;
   apr_hash_t *config = apr_hash_make(pool);
-  
+
   svn_version_t vcurrent = {SVN_VER_MAJOR, SVN_VER_MINOR, 0, ""};
   svn_version_t v1_2_0 = {1, 2, 0, ""};
   svn_version_t v1_3_0 = {1, 3, 0, ""};
@@ -5493,7 +5493,7 @@ reopen_modify(const svn_test_opts_t *opt
 
   /* Create txn with changes. */
   SVN_ERR(svn_fs_begin_txn(&txn, fs, head_rev, pool));
-  SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool)); 
+  SVN_ERR(svn_fs_txn_name(&txn_name, txn, pool));
   SVN_ERR(svn_fs_txn_root(&root, txn, pool));
   SVN_ERR(svn_fs_make_dir(root, "X", pool));
 
@@ -5903,7 +5903,7 @@ compare_contents(const svn_test_opts_t *
   svn_checksum_t *checksum1, *checksum2;
 
   /* (path, rev) pairs to compare plus the expected API return values */
-  struct 
+  struct
     {
       svn_revnum_t rev1;
       const char *path1;
@@ -5931,12 +5931,12 @@ compare_contents(const svn_test_opts_t *
       { 3, "bar", 4, "bar", TRUE, svn_tristate_true },
 
       /* variations on the same theme: same content, possibly different rep */
-      { 4, "foo", 4, "bar", FALSE, svn_tristate_unknown }, 
-      { 1, "foo", 4, "bar", FALSE, svn_tristate_unknown }, 
-      { 2, "foo", 4, "bar", FALSE, svn_tristate_unknown }, 
-      { 1, "foo", 4, "foo", FALSE, svn_tristate_unknown }, 
-      { 2, "foo", 4, "foo", FALSE, svn_tristate_unknown }, 
-      { 2, "bar", 4, "bar", FALSE, svn_tristate_unknown }, 
+      { 4, "foo", 4, "bar", FALSE, svn_tristate_unknown },
+      { 1, "foo", 4, "bar", FALSE, svn_tristate_unknown },
+      { 2, "foo", 4, "bar", FALSE, svn_tristate_unknown },
+      { 1, "foo", 4, "foo", FALSE, svn_tristate_unknown },
+      { 2, "foo", 4, "foo", FALSE, svn_tristate_unknown },
+      { 2, "bar", 4, "bar", FALSE, svn_tristate_unknown },
 
       /* EOL */
       { 0 },
@@ -6739,7 +6739,7 @@ test_prop_and_text_rep_sharing_collision
   SVN_ERR(svn_fs_file_length(&length, rev_root, "/foo", pool));
 
   SVN_TEST_ASSERT(length == 23);
-  return SVN_NO_ERROR; 
+  return SVN_NO_ERROR;
 }
 
 /* ------------------------------------------------------------------------ */

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/locks-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/locks-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/locks-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs/locks-test.c Sat Feb 14 11:15:05 2015
@@ -58,7 +58,7 @@ get_locks_callback(void *baton,
     {
       apr_hash_set(b->locks, lock_path->data, lock_path->len,
                    svn_lock_dup(lock, hash_pool));
-      return SVN_NO_ERROR; 
+      return SVN_NO_ERROR;
     }
   else
     {

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-fuzzy-test.c Sat Feb 14 11:15:05 2015
@@ -59,7 +59,7 @@ static svn_error_t *
 fuzzing_1_byte_test(const svn_test_opts_t *opts,
                     const char *repo_name,
                     unsigned char (* modifier)(unsigned char c),
-                    apr_pool_t *pool)
+                     apr_pool_t *pool)
 {
   svn_repos_t *repos;
   svn_fs_t *fs;
@@ -157,7 +157,7 @@ fuzzing_1_byte_test(const svn_test_opts_
   return SVN_NO_ERROR;
 }
 
-
+
 /*** Tests ***/
 
 /* ------------------------------------------------------------------------ */

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_fs/fs-fs-pack-test.c Sat Feb 14 11:15:05 2015
@@ -144,7 +144,7 @@ create_packed_filesystem(const char *dir
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_change_txn_prop(txn, SVN_PROP_REVISION_LOG,
-                                 svn_string_create(R1_LOG_MSG, pool), 
+                                 svn_string_create(R1_LOG_MSG, pool),
                                  pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));
@@ -1105,7 +1105,7 @@ id_parser_test(const svn_test_opts_t *op
                apr_pool_t *pool)
 {
  #define LONG_MAX_STR #LONG_MAX
-  
+
   /* Verify the revision number parser (e.g. first element of a txn ID) */
   svn_fs_fs__id_part_t id_part;
   SVN_ERR(svn_fs_fs__id_txn_parse(&id_part, "0-0"));

Propchange: subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sat Feb 14 11:15:05 2015
@@ -56,6 +56,7 @@
 /subversion/branches/nfc-nfd-aware-client/subversion/tests/libsvn_fs_x:870276,870376
 /subversion/branches/node_pool/subversion/tests/libsvn_fs_x:1304828-1305388
 /subversion/branches/performance/subversion/tests/libsvn_fs_x: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-10293
 36,1029339-1029340,1029342,1029344,1030763,1030827,1031203,1031235,1032285,1032333,1033040,1033057,1033294,1035869,1035882,1039511,1043705,1053735,1056015,1066452,1067683,1067697-1078365
+/subversion/branches/pin-externals/subversion/tests/libsvn_fs_x:1643757-1659392
 /subversion/branches/py-tests-as-modules/subversion/tests/libsvn_fs_x:956579-1033052
 /subversion/branches/ra_serf-digest-authn/subversion/tests/libsvn_fs_x:875693-876404
 /subversion/branches/reintegrate-improvements/subversion/tests/libsvn_fs_x:873853-874164
@@ -82,4 +83,4 @@
 /subversion/branches/verify-at-commit/subversion/tests/libsvn_fs_x:1462039-1462408
 /subversion/branches/verify-keep-going/subversion/tests/libsvn_fs_x:1439280-1492639,1546002-1546110
 /subversion/branches/wc-collate-path/subversion/tests/libsvn_fs_x:1402685-1480384
-/subversion/trunk/subversion/tests/libsvn_fs_x:1414756-1509914,1603891-1658357
+/subversion/trunk/subversion/tests/libsvn_fs_x:1414756-1509914,1603891-1659776

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/fs-x-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/fs-x-pack-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/fs-x-pack-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/fs-x-pack-test.c Sat Feb 14 11:15:05 2015
@@ -166,7 +166,7 @@ create_packed_filesystem(const char *dir
   SVN_ERR(svn_fs_txn_root(&txn_root, txn, subpool));
   SVN_ERR(svn_test__create_greek_tree(txn_root, subpool));
   SVN_ERR(svn_fs_change_txn_prop(txn, SVN_PROP_REVISION_LOG,
-                                 svn_string_create(R1_LOG_MSG, pool), 
+                                 svn_string_create(R1_LOG_MSG, pool),
                                  pool));
   SVN_ERR(svn_fs_commit_txn(&conflict, &after_rev, txn, subpool));
   SVN_TEST_ASSERT(SVN_IS_VALID_REVNUM(after_rev));

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/string-table-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/string-table-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/string-table-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_fs_x/string-table-test.c Sat Feb 14 11:15:05 2015
@@ -124,19 +124,19 @@ short_string_table_body(svn_boolean_t do
                         apr_pool_t *pool)
 {
   apr_size_t indexes[STRING_COUNT] = { 0 };
-    
+
   string_table_builder_t *builder;
   string_table_t *table;
   int i;
-  
+
   builder = svn_fs_x__string_table_builder_create(pool);
   for (i = 0; i < STRING_COUNT; ++i)
     indexes[i] = svn_fs_x__string_table_builder_add(builder, basic_strings[i], 0);
-  
+
   table = svn_fs_x__string_table_create(builder, pool);
   if (do_load_store)
     SVN_ERR(store_and_load_table(&table, pool));
-  
+
   SVN_TEST_ASSERT(indexes[2] == indexes[6]);
   for (i = 0; i < STRING_COUNT; ++i)
     {

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_ra/ra-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_ra/ra-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_ra/ra-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_ra/ra-test.c Sat Feb 14 11:15:05 2015
@@ -441,7 +441,7 @@ lock_cb(void *baton,
   result->err = ra_err;
 
   svn_hash_sets(b->results, apr_pstrdup(b->pool, path), result);
-  
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/cache-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/cache-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/cache-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/cache-test.c Sat Feb 14 11:15:05 2015
@@ -290,7 +290,7 @@ test_membuffer_serializer_error_handling
   /* Test setting data in cache using partial setter that
      always raises an error. */
   SVN_TEST_ASSERT_ERROR(
-    svn_cache__set_partial(cache, "twenty", 
+    svn_cache__set_partial(cache, "twenty",
                            raise_error_partial_setter_func,
                            NULL, pool),
     APR_EGENERAL);

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/checksum-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/checksum-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/checksum-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/checksum-test.c Sat Feb 14 11:15:05 2015
@@ -170,7 +170,7 @@ zero_cross_match(apr_pool_t *pool)
     {
       svn_checksum_t *i_zero;
       svn_checksum_t *i_A;
-    
+
       i_zero = svn_checksum_create(i_kind, pool);
       SVN_ERR(svn_checksum_clear(i_zero));
       SVN_ERR(svn_checksum(&i_A, i_kind, "A", 1, pool));

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/config-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/config-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/config-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/config-test.c Sat Feb 14 11:15:05 2015
@@ -363,7 +363,7 @@ test_expand(const svn_test_opts_t *opts,
   /* Get expanded "c". */
   svn_config_get(cfg, &val, "section1", "c", NULL);
 
-  /* With pool debugging enabled this ensures that the expanded value 
+  /* With pool debugging enabled this ensures that the expanded value
      of "c" was not created in a temporary pool when expanding "g". */
   SVN_TEST_STRING_ASSERT(val, "bar");
 

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/io-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/io-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/io-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/io-test.c Sat Feb 14 11:15:05 2015
@@ -703,7 +703,7 @@ ignore_enoent(apr_pool_t *pool)
   SVN_ERR(svn_io_set_file_executable(path, FALSE, TRUE, pool));
   SVN_ERR(svn_io_stat_dirent2(&dirent_p, path, TRUE, TRUE, pool, pool));
   SVN_ERR(svn_io_stat_dirent2(&dirent_p, path, FALSE, TRUE, pool, pool));
-  
+
   /* Neither path nor parent exists. */
   path = svn_dirent_join(path, "not-present", pool);
   SVN_ERR(svn_io_remove_dir2(path, TRUE, NULL, NULL, pool));

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/packed-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/packed-data-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/packed-data-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/packed-data-test.c Sat Feb 14 11:15:05 2015
@@ -99,7 +99,7 @@ verify_uint_stream(const apr_uint64_t *v
   SVN_TEST_ASSERT(stream);
   SVN_TEST_ASSERT(!svn_packed__next_int_stream(stream));
   SVN_TEST_ASSERT(!svn_packed__first_byte_stream(root));
-  
+
   /* the stream shall contain exactly the items we put into it */
   SVN_TEST_ASSERT(svn_packed__int_count(stream) == count);
   for (i = 0; i < count; ++i)
@@ -356,7 +356,7 @@ pack(const base_record_t *data,
   svn_packed__create_int_substream(base_stream, TRUE, TRUE);   /* large_signed1 */
   svn_packed__create_int_substream(base_stream, FALSE, TRUE);  /* large_signed2 */
   svn_packed__create_int_substream(base_stream, TRUE, FALSE);  /* prime */
-  
+
   for (i = 0; i < count; ++i)
     {
       svn_packed__add_int(base_stream, data[i].counter);
@@ -434,7 +434,7 @@ unpack(apr_size_t *count,
   base_record_t *data;
   *count = svn_packed__int_count(sub_count_stream) / 2;
   data = apr_pcalloc(pool, *count * sizeof(*data));
-  
+
   for (i = 0; i < *count; ++i)
     {
       data[i].counter = (int) svn_packed__get_int(base_stream);

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/priority-queue-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/priority-queue-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/priority-queue-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/priority-queue-test.c Sat Feb 14 11:15:05 2015
@@ -70,7 +70,7 @@ verify_empty_queue(svn_priority_queue__t
   /* these should be no-ops */
   svn_priority_queue__update(queue);
   svn_priority_queue__pop(queue);
-  
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/sqlite-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/sqlite-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/sqlite-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/sqlite-test.c Sat Feb 14 11:15:05 2015
@@ -57,7 +57,7 @@ error_second(svn_sqlite__context_t *sctx
     svn_sqlite__result_error(sctx, "fake error", 0);
   else
     svn_sqlite__result_int64(sctx, 1);
-  
+
   return SVN_NO_ERROR;
 }
 
@@ -102,7 +102,7 @@ test_sqlite_reset(apr_pool_t *pool)
 
   /* The svn_sqlite__step wrapper calls svn_sqlite__reset when step
      fails so the reset call here is a no-op.  The first step can be
-     repeated. */ 
+     repeated. */
   SVN_ERR(svn_sqlite__reset(stmt));
   SVN_ERR(svn_sqlite__step(&have_row, stmt));
   SVN_TEST_ASSERT(have_row);

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/string-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/string-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/string-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/string-test.c Sat Feb 14 11:15:05 2015
@@ -849,7 +849,7 @@ test_string_matching(apr_pool_t *pool)
       SVN_TEST_ASSERT(match_len == test->match_len);
       SVN_TEST_ASSERT(rmatch_len == test->rmatch_len);
     }
-  
+
   return SVN_NO_ERROR;
 }
 

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/subst_translate-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/subst_translate-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/subst_translate-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/subst_translate-test.c Sat Feb 14 11:15:05 2015
@@ -397,7 +397,7 @@ test_svn_subst_long_keywords(apr_pool_t
       "01234567890123456789012345678901234567890123456789"
       "012345678901234567890123456789012345678901234567";
 
-  /* The longest keyword that can be expanded: the value is empty. */ 
+  /* The longest keyword that can be expanded: the value is empty. */
   const char keyword_z[]
     = "Q"
       "01234567890123456789012345678901234567890123456789"

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1659777&r1=1659776&r2=1659777&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_wc/conflict-data-test.c Sat Feb 14 11:15:05 2015
@@ -294,6 +294,7 @@ test_read_write_tree_conflicts(const svn
   SVN_ERR(sbox_wc_mkdir(&sbox, "A"));
   SVN_ERR(sbox_wc_mkdir(&sbox, "A/bar"));
   SVN_ERR(sbox_file_write(&sbox, "A/foo", ""));
+  SVN_ERR(sbox_wc_add(&sbox, "A/foo"));
 
   conflict1 = tree_conflict_create(child1_abspath, svn_node_file,
                                    svn_wc_operation_merge,



Mime
View raw message