You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2012/10/06 05:59:38 UTC

svn commit: r1394915 [7/7] - in /subversion/branches/inheritable-props: ./ build/ build/ac-macros/ subversion/bindings/swig/ subversion/bindings/swig/include/ subversion/bindings/swig/perl/libsvn_swig_perl/ subversion/bindings/swig/perl/native/ subvers...

Modified: subversion/branches/inheritable-props/subversion/svnserve/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnserve/main.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnserve/main.c (original)
+++ subversion/branches/inheritable-props/subversion/svnserve/main.c Sat Oct  6 03:59:33 2012
@@ -149,6 +149,7 @@ void winservice_notify_stop(void)
 #define SVNSERVE_OPT_CACHE_FULLTEXTS 266
 #define SVNSERVE_OPT_CACHE_REVPROPS  267
 #define SVNSERVE_OPT_SINGLE_CONN     268
+#define SVNSERVE_OPT_CLIENT_SPEED    269
 
 static const apr_getopt_option_t svnserve__options[] =
   {
@@ -235,6 +236,16 @@ static const apr_getopt_option_t svnserv
         "Default is no.\n"
         "                             "
         "[used for FSFS repositories only]")},
+    {"client-speed", SVNSERVE_OPT_CLIENT_SPEED, 1,
+     N_("Optimize throughput based on the assumption that\n"
+        "                             "
+        "clients can receive data with a bitrate of at\n"
+        "                             "
+        "least ARG Gbit/s.  For clients receiving data at\n"
+        "                             "
+        "less than 1 Gbit/s, zero should be used.\n"
+        "                             "
+        "Default is 0 (optimizations disabled).")},
 #ifdef CONNECTION_HAVE_THREAD_OPTION
     /* ### Making the assumption here that WIN32 never has fork and so
      * ### this option never exists when --service exists. */
@@ -497,6 +508,8 @@ int main(int argc, const char *argv[])
   params.cache_fulltexts = TRUE;
   params.cache_txdeltas = FALSE;
   params.cache_revprops = FALSE;
+  params.zero_copy_limit = 0;
+  params.error_check_interval = 4096;
 
   while (1)
     {
@@ -645,6 +658,18 @@ int main(int argc, const char *argv[])
              = svn_tristate__from_word(arg) == svn_tristate_true;
           break;
 
+        case SVNSERVE_OPT_CLIENT_SPEED:
+          {
+            apr_size_t bandwidth = (apr_size_t)apr_strtoi64(arg, NULL, 0);
+
+            /* block other clients for at most 1 ms (at full bandwidth) */
+            params.zero_copy_limit = bandwidth * 120000;
+
+            /* check for aborted connections at the same rate */
+            params.error_check_interval = bandwidth * 120000;
+          }
+          break;
+
 #ifdef WIN32
         case SVNSERVE_OPT_SERVICE:
           if (run_mode != run_mode_service)
@@ -755,8 +780,10 @@ int main(int argc, const char *argv[])
        * the pool cleanup handlers that call sasl_dispose() (connection_pool)
        * and sasl_done() (pool) are run in the right order. See issue #3664. */
       connection_pool = svn_pool_create(pool);
-      conn = svn_ra_svn_create_conn2(NULL, in_file, out_file,
+      conn = svn_ra_svn_create_conn3(NULL, in_file, out_file,
                                      params.compression_level,
+                                     params.zero_copy_limit,
+                                     params.error_check_interval,
                                      connection_pool);
       svn_error_clear(serve(conn, &params, connection_pool));
       exit(0);
@@ -988,8 +1015,10 @@ int main(int argc, const char *argv[])
           /* It's not a fatal error if we cannot enable keep-alives. */
         }
 
-      conn = svn_ra_svn_create_conn2(usock, NULL, NULL,
+      conn = svn_ra_svn_create_conn3(usock, NULL, NULL,
                                      params.compression_level,
+                                     params.zero_copy_limit,
+                                     params.error_check_interval,
                                      connection_pool);
 
       if (run_mode == run_mode_listen_once)

Modified: subversion/branches/inheritable-props/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnserve/serve.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnserve/serve.c (original)
+++ subversion/branches/inheritable-props/subversion/svnserve/serve.c Sat Oct  6 03:59:33 2012
@@ -886,13 +886,14 @@ static svn_error_t *accept_report(svn_bo
   /* Make an svn_repos report baton.  Tell it to drive the network editor
    * when the report is complete. */
   svn_ra_svn_get_editor(&editor, &edit_baton, conn, pool, NULL, NULL);
-  SVN_CMD_ERR(svn_repos_begin_report2(&report_baton, rev, b->repos,
+  SVN_CMD_ERR(svn_repos_begin_report3(&report_baton, rev, b->repos,
                                       b->fs_path->data, target, tgt_path,
                                       text_deltas, depth, ignore_ancestry,
                                       send_copyfrom_args,
                                       editor, edit_baton,
                                       authz_check_access_cb_func(b),
-                                      b, pool));
+                                      b, svn_ra_svn_zero_copy_limit(conn),
+                                      pool));
 
   rb.sb = b;
   rb.repos_url = svn_path_uri_decode(b->repos_url, pool);
@@ -3367,7 +3368,7 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
   /* Send greeting.  We don't support version 1 any more, so we can
    * send an empty mechlist. */
   if (params->compression_level > 0)
-    SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwwww)",
+    SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwwwww)",
                                           (apr_uint64_t) 2, (apr_uint64_t) 2,
                                           SVN_RA_SVN_CAP_EDIT_PIPELINE,
                                           SVN_RA_SVN_CAP_SVNDIFF1,
@@ -3377,9 +3378,10 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
                                           SVN_RA_SVN_CAP_LOG_REVPROPS,
                                           SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
                                           SVN_RA_SVN_CAP_PARTIAL_REPLAY,
-                                          SVN_RA_SVN_CAP_INHERITED_PROPS));
+                                          SVN_RA_SVN_CAP_INHERITED_PROPS,
+                                          SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS));
   else
-    SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwww)",
+    SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwwww)",
                                           (apr_uint64_t) 2, (apr_uint64_t) 2,
                                           SVN_RA_SVN_CAP_EDIT_PIPELINE,
                                           SVN_RA_SVN_CAP_ABSENT_ENTRIES,
@@ -3388,7 +3390,8 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
                                           SVN_RA_SVN_CAP_LOG_REVPROPS,
                                           SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
                                           SVN_RA_SVN_CAP_PARTIAL_REPLAY,
-                                          SVN_RA_SVN_CAP_INHERITED_PROPS));
+                                          SVN_RA_SVN_CAP_INHERITED_PROPS,
+                                          SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS));
 
   /* Read client response, which we assume to be in version 2 format:
    * version, capability list, and client URL; then we do an auth

Modified: subversion/branches/inheritable-props/subversion/svnserve/server.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnserve/server.h?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnserve/server.h (original)
+++ subversion/branches/inheritable-props/subversion/svnserve/server.h Sat Oct  6 03:59:33 2012
@@ -128,6 +128,13 @@ typedef struct serve_params_t {
      Defaults to SVN_DELTA_COMPRESSION_LEVEL_DEFAULT. */
   int compression_level;
 
+  /* Item size up to which we use the zero-copy code path to transmit
+     them over the network.  0 disables that code path. */
+  apr_size_t zero_copy_limit;
+
+  /* Amount of data to send between checks for cancellation requests
+     coming in from the client. */
+  apr_size_t error_check_interval;
 } serve_params_t;
 
 /* Serve the connection CONN according to the parameters PARAMS. */

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py Sat Oct  6 03:59:33 2012
@@ -1671,7 +1671,6 @@ def merge_replace_setup(sbox):
 
 #----------------------------------------------------------------------
 # ra_serf causes duplicate notifications with this test:
-@XFail(svntest.main.is_ra_type_dav_serf)
 @Issue(3802)
 def merge_replace_causes_tree_conflict(sbox):
   "replace vs. edit tree-conflicts"

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py Sat Oct  6 03:59:33 2012
@@ -70,23 +70,10 @@ def no_mergeinfo(sbox):
   sbox.build(create_wc=False)
   sbox.simple_repo_copy('A', 'A2')
   svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
-                                           "\n".join(
-["    youngest          last               repos."] +
-["    common            full     tip of    path of"] +
-["    ancestor          merge    branch    branch"] +
-[""] +
-["    1                          2       "] +
-["    |                          |       "] +
-["  ----------| ... |-------------         A"] +
-["     \                                 "] +
-["      \                                "] +
-["       -----| ... |-------------         A2"] +
-["                               |       "] +
-["                               WC      "] +
-[""]
-                                           ),
+                                           [],
                                            sbox.repo_url + '/A',
-                                           sbox.repo_url + '/A2')
+                                           sbox.repo_url + '/A2',
+                                           "--show-revs=merged")
 
 def mergeinfo(sbox):
   "'mergeinfo' on a path with mergeinfo"

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py Sat Oct  6 03:59:33 2012
@@ -4099,6 +4099,61 @@ def patch_add_and_delete(sbox):
                                        1, # check-props
                                        1) # dry-run
 
+
+def patch_git_with_index_line(sbox):
+  "apply git patch with 'index' line"
+
+  sbox.build(read_only = True)
+  wc_dir = sbox.wc_dir
+  patch_file_path = make_patch_path(sbox)
+
+  unidiff_patch = [
+    "diff --git a/src/tools/ConsoleRunner/hi.txt b/src/tools/ConsoleRunner/hi.txt\n",
+    "new file mode 100644\n",
+    "index 0000000..c82a38f\n",
+    "--- /dev/null\n",
+    "+++ b/src/tools/ConsoleRunner/hi.txt\n",
+    "@@ -0,0 +1 @@\n",
+    "+hihihihihihi\n",
+    "\ No newline at end of file\n",
+  ]
+
+  svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+  expected_output = [
+    'A         %s\n' % sbox.ospath('src'),
+    'A         %s\n' % sbox.ospath('src/tools'),
+    'A         %s\n' % sbox.ospath('src/tools/ConsoleRunner'),
+    'A         %s\n' % sbox.ospath('src/tools/ConsoleRunner/hi.txt'),
+  ]
+
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.add({
+      'src/'                            : Item(status='A ', wc_rev=0),
+      'src/tools'                       : Item(status='A ', wc_rev=0),
+      'src/tools/ConsoleRunner/'        : Item(status='A ', wc_rev=0),
+      'src/tools/ConsoleRunner/hi.txt'  : Item(status='A ', wc_rev=0),
+  })
+
+  expected_disk = svntest.main.greek_state.copy()
+  expected_disk.add({'src'                            : Item(),
+                     'src/tools'                      : Item(),
+                     'src/tools/ConsoleRunner'        : Item(),
+                     'src/tools/ConsoleRunner/hi.txt' :
+                        Item(contents="hihihihihihi")
+                   })
+
+  expected_skip = wc.State('', { })
+
+  svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+                                       expected_output,
+                                       expected_disk,
+                                       expected_status,
+                                       expected_skip,
+                                       None, # expected err
+                                       1, # check-props
+                                       1) # dry-run
+
 ########################################################################
 #Run the tests
 
@@ -4143,6 +4198,7 @@ test_list = [ None,
               patch_delete_and_skip,
               patch_target_no_eol_at_eof,
               patch_add_and_delete,
+              patch_git_with_index_line,
             ]
 
 if __name__ == '__main__':

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py Sat Oct  6 03:59:33 2012
@@ -25,7 +25,7 @@
 ######################################################################
 
 # General modules
-import shutil, sys, re, os
+import shutil, sys, re, os, stat
 import time
 
 # Our testing module
@@ -243,6 +243,35 @@ def prop_conflict_resolution(sbox):
                                      [], # Prop deleted
                                      ['incoming-conflict\n'])
 
+@SkipUnless(svntest.main.is_posix_os)
+def auto_resolve_executable_file(sbox):
+  "resolve file with executable bit set"
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  # Mark iota as executable
+  sbox.simple_propset("svn:executable", '*', 'iota')
+  sbox.simple_commit() # r2
+
+  # Make a change to iota in r3
+  svntest.main.file_write(sbox.ospath('iota'), "boo\n")
+  sbox.simple_commit() # r3
+
+  # Update back to r2, and tweak iota to provoke a text conflict
+  sbox.simple_update(revision=2)
+  svntest.main.file_write(sbox.ospath('iota'), "bzzt\n")
+
+  # Get permission bits of iota
+  mode = os.stat(sbox.ospath('iota'))[stat.ST_MODE]
+
+  # Update back to r3, and auto-resolve the text conflict.
+  svntest.main.run_svn(False, 'update', wc_dir, '--accept', 'theirs-full')
+
+  # permission bits of iota should be unaffected
+  if mode != os.stat(sbox.ospath('iota'))[stat.ST_MODE]:
+    raise svntest.Failure
+
+
 ########################################################################
 # Run the tests
 
@@ -250,6 +279,7 @@ def prop_conflict_resolution(sbox):
 test_list = [ None,
               automatic_conflict_resolution,
               prop_conflict_resolution,
+              auto_resolve_executable_file,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py Sat Oct  6 03:59:33 2012
@@ -563,6 +563,7 @@ def status_add_deleted_directory(sbox):
 # Regression test for issue #939:
 # Recursive 'svn add' should still traverse already-versioned dirs.
 @Issue(939)
+@Issue(4241)
 def add_recursive_already_versioned(sbox):
   "'svn add' should traverse already-versioned dirs"
 
@@ -592,8 +593,8 @@ def add_recursive_already_versioned(sbox
   ### or else Subversion will think you're trying to add the working copy
   ### to its parent directory, and will (possibly, if the parent directory
   ### isn't versioned) fail.
-  #svntest.main.run_svn(None, 'add', '--force', wc_dir)
-  #svntest.actions.run_and_verify_status(wc_dir, expected_status)
+  svntest.main.run_svn(None, 'add', '--force', wc_dir)
+  svntest.actions.run_and_verify_status(wc_dir, expected_status)
 
   # Now revert, and do the adds again from inside the working copy.
   svntest.main.run_svn(None, 'revert', '--recursive', wc_dir)

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py Sat Oct  6 03:59:33 2012
@@ -986,25 +986,19 @@ def status_ignored_dir(sbox):
 
 #----------------------------------------------------------------------
 
-@Issue(2030)
-def status_unversioned_dir(sbox):
-  "status on unversioned dir"
-  sbox.build(read_only = True, create_wc = False)
-  dir = sbox.wc_dir
-  svntest.main.safe_rmtree(sbox.wc_dir)
-  os.mkdir(dir)
-
-  # Depending on whether you run the tests below a working copy
-  # or not, the error message might either be something like
-  # svn: warning: W155007: '...copies/stat_tests-19' is not a working copy
-  # or
-  # svn: warning: W155010: The node '...copies/stat_tests-19' was not found.
+def status_unversioned_dir_in_wc(sbox):
+  "status on unversioned dir in working copy"
+  sbox.build(read_only = True)
 
-  expected_err = "svn: warning: W1550(07|10): .*'.*(/|\\\\)" + \
-                 os.path.basename(dir) + \
-                 "' (is not a working copy|was not found)"
+  # Create two unversioned directories within the test working copy
+  path = sbox.ospath('1/2')
+  os.makedirs(path)
+
+  expected_err = "svn: warning: (W155007|W155010): .*'.*(/|\\\\)" + \
+                 os.path.basename(path) + \
+                 "' was not found"
   svntest.actions.run_and_verify_svn2(None, [], expected_err, 0,
-                                      "status", dir, dir)
+                                      "status", path)
 
 #----------------------------------------------------------------------
 
@@ -1883,14 +1877,6 @@ def status_nested_wc_old_format(sbox):
   os.chdir(wc_dir)
   svntest.actions.run_and_verify_svn(None, [ "?       subdir\n" ], [], 'st')
 
-########################################################################
-# Run the tests
-
-
-def simple_lock(sbox, relpath):
-  path = os.path.join(sbox.wc_dir, relpath)
-  svntest.actions.run_and_verify_svn(None, None, [], 'lock', path)
-
 #----------------------------------------------------------------------
 # Regression test for issue #3855 "status doesn't show 'K' on a locked
 # deleted node".
@@ -1902,7 +1888,8 @@ def status_locked_deleted(sbox):
   iota_path = sbox.ospath('iota')
 
   sbox.simple_rm('iota')
-  simple_lock(sbox, 'iota')
+  svntest.actions.run_and_verify_svn(None, None, [], 'lock',
+                                     os.path.join(sbox.wc_dir, 'iota'))
   svntest.actions.run_and_verify_svn(None, ['D    K  %s\n' % iota_path], [],
                                      'status', iota_path)
 
@@ -2036,6 +2023,19 @@ def status_not_present(sbox):
                                      sbox.ospath('A/mu'),
                                      sbox.ospath('no-file'))
 
+# Skip this test is a .svn dir exists in the root directory
+@Skip(lambda: os.path.exists("/%s" % svntest.main.get_admin_name())) 
+def status_unversioned_dir(sbox):
+  "status on unversioned dir"
+  sbox.build(read_only = True, create_wc = False)
+
+  # Run svn status on "/", which we assume exists and isn't a WC.
+  # This should work on UNIX-like systems and Windows systems
+  expected_err = "svn: warning: W1550(07|10): .*'.*(/|\\\\)" + \
+                 "' is not a working copy"
+  svntest.actions.run_and_verify_svn2(None, [], expected_err, 0,
+                                      "status", "/")
+
 ########################################################################
 # Run the tests
 
@@ -2060,7 +2060,7 @@ test_list = [ None,
               missing_dir_in_anchor,
               status_in_xml,
               status_ignored_dir,
-              status_unversioned_dir,
+              status_unversioned_dir_in_wc,
               status_missing_dir,
               status_nonrecursive_update_different_cwd,
               status_add_plus_conflict,
@@ -2080,6 +2080,7 @@ test_list = [ None,
               wclock_status,
               modified_modulo_translation,
               status_not_present,
+              status_unversioned_dir,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py Sat Oct  6 03:59:33 2012
@@ -679,6 +679,33 @@ def accepts_deltas(sbox):
 
   
 
+@Issue(4234)
+def dumpfilter_targets_expect_leading_slash_prefixes(sbox):
+  "dumpfilter targets expect leading '/' in prefixes"
+  ## See http://subversion.tigris.org/issues/show_bug.cgi?id=4234. ##
+
+  test_create(sbox)
+
+  dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+                                   'svndumpfilter_tests_data',
+                                   'greek_tree.dump')
+  dumpfile = open(dumpfile_location).read()
+
+  (fd, targets_file) = tempfile.mkstemp(dir=svntest.main.temp_dir)
+  try:
+    targets = open(targets_file, 'w')
+
+    # Removing the leading slash in path prefixes should work.
+    targets.write('A/D/H\n')
+    targets.write('A/D/G\n')
+    targets.close()
+    _simple_dumpfilter_test(sbox, dumpfile,
+                            'exclude', '/A/B/E', '--targets', targets_file)
+  finally:
+    os.close(fd)
+    os.remove(targets_file)
+
+
 ########################################################################
 # Run the tests
 
@@ -693,6 +720,7 @@ test_list = [ None,
               dropped_but_not_renumbered_empty_revs,
               match_empty_prefix,
               accepts_deltas,
+              dumpfilter_targets_expect_leading_slash_prefixes,
               ]
 
 if __name__ == '__main__':

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py Sat Oct  6 03:59:33 2012
@@ -698,9 +698,14 @@ fp.close()"""
                     'bogus_rev_val\n',
                     '  bogus_prop\n',
                     '  svn:log\n', '  svn:author\n',
-                    #  internal property, not really expected
-                    '  svn:check-locks\n',
-                    '  bogus_rev_prop\n', '  svn:date\n']
+                    '  svn:check-locks\n', # internal prop, not really expected
+                    '  bogus_rev_prop\n',
+                    '  svn:date\n',
+                    '  svn:txn:client-compat-version\n',
+                    ]
+  # ra_dav and ra_svn add the user-agent ephemeral property
+  if svntest.main.is_ra_type_dav() or svntest.main.is_ra_type_svn():
+    expected_data.append('  svn:txn:user-agent\n')
   verify_logfile(logfilepath, svntest.verify.UnorderedOutput(expected_data))
 
 def property_delete(sbox):

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py Sat Oct  6 03:59:33 2012
@@ -1266,9 +1266,9 @@ def run_and_verify_mergeinfo(error_re_st
                              expected_output = [],
                              *args):
   """Run 'svn mergeinfo ARGS', and compare the result against
-  EXPECTED_OUTPUT, which is either a list of string representations
-  of revisions expected in the output, or a plain string.
-  Raise an exception if an unexpected output is encountered."""
+  EXPECTED_OUTPUT, a list of string representations of revisions
+  expected in the output.  Raise an exception if an unexpected
+  output is encountered."""
 
   mergeinfo_command = ["mergeinfo"]
   mergeinfo_command.extend(args)
@@ -1281,36 +1281,23 @@ def run_and_verify_mergeinfo(error_re_st
     verify.verify_outputs(None, None, err, None, expected_err)
     return
 
-  if isinstance(expected_output, list):
-    out = [_f for _f in [x.rstrip()[1:] for x in out] if _f]
-    expected_output.sort()
-    extra_out = []
-    if out != expected_output:
-      exp_hash = dict.fromkeys(expected_output)
-      for rev in out:
-        if rev in exp_hash:
-          del(exp_hash[rev])
-        else:
-          extra_out.append(rev)
-      extra_exp = list(exp_hash.keys())
-      raise Exception("Unexpected 'svn mergeinfo' output:\n"
-                      "  expected but not found: %s\n"
-                      "  found but not expected: %s"
-                      % (', '.join([str(x) for x in extra_exp]),
-                         ', '.join([str(x) for x in extra_out])))
-  elif isinstance(expected_output, str):
-    out = "".join(out)
-    if out != expected_output:
-      raise Exception("Unexpected 'svn mergeinfo' output:\n"
-                      "  expected:\n%s\n"
-                      "  found:\n%s\n"
-                      "  diff:\n%s\n"
-                      % (expected_output, out,
-                         '\n'.join(difflib.unified_diff(
-                                     expected_output.splitlines(),
-                                     out.splitlines()))))
-  else:
-    raise Exception("expected_output has unexpected type")
+  out = [_f for _f in [x.rstrip()[1:] for x in out] if _f]
+  expected_output.sort()
+  extra_out = []
+  if out != expected_output:
+    exp_hash = dict.fromkeys(expected_output)
+    for rev in out:
+      if rev in exp_hash:
+        del(exp_hash[rev])
+      else:
+        extra_out.append(rev)
+    extra_exp = list(exp_hash.keys())
+    raise Exception("Unexpected 'svn mergeinfo' output:\n"
+                    "  expected but not found: %s\n"
+                    "  found but not expected: %s"
+                    % (', '.join([str(x) for x in extra_exp]),
+                       ', '.join([str(x) for x in extra_out])))
+
 
 def run_and_verify_switch(wc_dir_name,
                           wc_target,

Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py Sat Oct  6 03:59:33 2012
@@ -652,7 +652,7 @@ def merge_file_mod_onto_not_file(sbox):
   "merge file: modify onto not-file"
   sbox2 = sbox.clone_dependent()
   test_tc_merge(sbox, f_mods, br_scen = f_dels + f_moves + f_rpl_d)
-  test_tc_merge(sbox2, f_mods, wc_scen = f_dels)
+  test_tc_merge(sbox2, f_mods, wc_scen = f_dels + f_moves)
   # Note: See UC4 in notes/tree-conflicts/use-cases.txt.
 
 def merge_file_del_onto_not_same(sbox):

Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c Sat Oct  6 03:59:33 2012
@@ -4176,12 +4176,12 @@ check_related(const svn_test_opts_t *opt
             int related = 0;
 
             /* Get the ID for the first path/revision combination. */
-            SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr1.rev, pool));
-            SVN_ERR(svn_fs_node_id(&id1, rev_root, pr1.path, pool));
+            SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr1.rev, subpool));
+            SVN_ERR(svn_fs_node_id(&id1, rev_root, pr1.path, subpool));
 
             /* Get the ID for the second path/revision combination. */
-            SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr2.rev, pool));
-            SVN_ERR(svn_fs_node_id(&id2, rev_root, pr2.path, pool));
+            SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr2.rev, subpool));
+            SVN_ERR(svn_fs_node_id(&id2, rev_root, pr2.path, subpool));
 
             /* <exciting> Now, run the relationship check! </exciting> */
             related = svn_fs_check_related(id1, id2) ? 1 : 0;

Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c Sat Oct  6 03:59:33 2012
@@ -1077,9 +1077,10 @@ rmlocks(const svn_test_opts_t *opts,
     SVN_ERR(create_rmlocks_editor(&editor, &edit_baton, &removed, subpool));
 
     /* Report what we have. */
-    SVN_ERR(svn_repos_begin_report2(&report_baton, 1, repos, "/", "", NULL,
+    SVN_ERR(svn_repos_begin_report3(&report_baton, 1, repos, "/", "", NULL,
                                     FALSE, svn_depth_infinity, FALSE, FALSE,
-                                    editor, edit_baton, NULL, NULL, subpool));
+                                    editor, edit_baton, NULL, NULL, 1024,
+                                    subpool));
     SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
                                 svn_depth_infinity,
                                 FALSE, NULL, subpool));
@@ -2065,9 +2066,10 @@ reporter_depth_exclude(const svn_test_op
   SVN_ERR(dir_delta_get_editor(&editor, &edit_baton, fs,
                                txn_root, "", subpool));
 
-  SVN_ERR(svn_repos_begin_report2(&report_baton, 2, repos, "/", "", NULL,
+  SVN_ERR(svn_repos_begin_report3(&report_baton, 2, repos, "/", "", NULL,
                                   TRUE, svn_depth_infinity, FALSE, FALSE,
-                                  editor, edit_baton, NULL, NULL, subpool));
+                                  editor, edit_baton, NULL, NULL, 16,
+                                  subpool));
   SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
                               svn_depth_infinity,
                               FALSE, NULL, subpool));
@@ -2122,9 +2124,10 @@ reporter_depth_exclude(const svn_test_op
   SVN_ERR(dir_delta_get_editor(&editor, &edit_baton, fs,
                                txn_root, "", subpool));
 
-  SVN_ERR(svn_repos_begin_report2(&report_baton, 2, repos, "/", "", NULL,
+  SVN_ERR(svn_repos_begin_report3(&report_baton, 2, repos, "/", "", NULL,
                                   TRUE, svn_depth_infinity, FALSE, FALSE,
-                                  editor, edit_baton, NULL, NULL, subpool));
+                                  editor, edit_baton, NULL, NULL, 20,
+                                  subpool));
   SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
                               svn_depth_infinity,
                               FALSE, NULL, subpool));

Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c Sat Oct  6 03:59:33 2012
@@ -183,8 +183,8 @@ test_membuffer_cache_basic(apr_pool_t *p
   svn_cache__t *cache;
   svn_membuffer_t *membuffer;
 
-  SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1,
-                                            TRUE, pool));
+  SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1, 0,
+                                            TRUE, TRUE, pool));
 
   /* Create a cache with just one entry. */
   SVN_ERR(svn_cache__create_membuffer_cache(&cache,

Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c Sat Oct  6 03:59:33 2012
@@ -24,6 +24,7 @@
 #include <apr_pools.h>
 
 #include "svn_error.h"
+#include "private/svn_pseudo_md5.h"
 
 #include "../svn_test.h"
 
@@ -80,6 +81,38 @@ test_checksum_empty(apr_pool_t *pool)
   return SVN_NO_ERROR;
 }
 
+static svn_error_t *
+test_pseudo_md5(apr_pool_t *pool)
+{
+  apr_uint32_t input[16] = { 0 };
+  apr_uint32_t digest_15[4] = { 0 };
+  apr_uint32_t digest_31[4] = { 0 };
+  apr_uint32_t digest_63[4] = { 0 };
+  svn_checksum_t *checksum;
+
+  /* input is all 0s but the hash shall be different
+     (due to different input sizes)*/
+  svn__pseudo_md5_15(digest_15, input);
+  svn__pseudo_md5_31(digest_31, input);
+  svn__pseudo_md5_63(digest_63, input);
+
+  SVN_TEST_ASSERT(memcmp(digest_15, digest_31, sizeof(digest_15)));
+  SVN_TEST_ASSERT(memcmp(digest_15, digest_63, sizeof(digest_15)));
+  SVN_TEST_ASSERT(memcmp(digest_31, digest_63, sizeof(digest_15)));
+
+  /* the checksums shall also be different from "proper" MD5 */
+  SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 15, pool));
+  SVN_TEST_ASSERT(memcmp(digest_15, checksum->digest, sizeof(digest_15)));
+  
+  SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 31, pool));
+  SVN_TEST_ASSERT(memcmp(digest_31, checksum->digest, sizeof(digest_15)));
+
+  SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 63, pool));
+  SVN_TEST_ASSERT(memcmp(digest_63, checksum->digest, sizeof(digest_15)));
+
+  return SVN_NO_ERROR;
+}
+
 /* An array of all test functions */
 struct svn_test_descriptor_t test_funcs[] =
   {
@@ -88,5 +121,7 @@ struct svn_test_descriptor_t test_funcs[
                    "checksum parse"),
     SVN_TEST_PASS2(test_checksum_empty,
                    "checksum emptiness"),
+    SVN_TEST_PASS2(test_pseudo_md5,
+                   "pseudo-md5 compatibility"),
     SVN_TEST_NULL
   };

Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c Sat Oct  6 03:59:33 2012
@@ -4926,9 +4926,9 @@ mixed_rev_move(const svn_test_opts_t *op
       {1, "A/B/C", "base-deleted", NO_COPY_FROM},
       {1, "X",     "normal",       1, "A", MOVED_HERE},
       {1, "X/B",   "not-present",  2, "A/B"},
-      {2, "X/B",   "normal",       2, "A/B", MOVED_HERE},
+      {2, "X/B",   "normal",       2, "A/B"},
       {2, "X/B/C", "not-present",  3, "A/B/C"},
-      {3, "X/B/C", "normal",       3, "A/B/C", MOVED_HERE},
+      {3, "X/B/C", "normal",       3, "A/B/C"},
       {0}
     };
     SVN_ERR(check_db_rows(&b, "", nodes));

Modified: subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd (original)
+++ subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd Sat Oct  6 03:59:33 2012
@@ -32,7 +32,7 @@ IF ERRORLEVEL 1 (
 PATH %PATH%;%TESTDIR%\bin
 SET result=0
 
-python win-tests.py -r -f fsfs --javahl "%TESTDIR%\tests"
+python win-tests.py -d -f fsfs --javahl "%TESTDIR%\tests"
 IF ERRORLEVEL 1 (
   echo [python reported error %ERRORLEVEL%]
   SET result=1

Modified: subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd (original)
+++ subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd Sat Oct  6 03:59:33 2012
@@ -29,5 +29,8 @@ IF ERRORLEVEL 1 (
   EXIT /B 0
 )
 
-msbuild subversion_vcnet.sln /p:Configuration=Release /p:Platform=win32 /t:__JAVAHL__ /t:__SWIG_PYTHON__ /t:__SWIG_PERL__ /t:__JAVAHL_TESTS__
+msbuild subversion_vcnet.sln /p:Configuration=Debug /p:Platform=win32 /t:__JAVAHL__ /t:__JAVAHL_TESTS__
+IF ERRORLEVEL 1 EXIT /B 1 
+
+msbuild subversion_vcnet.sln /p:Configuration=Release /p:Platform=win32 /t:__SWIG_PYTHON__ /t:__SWIG_PERL__
 IF ERRORLEVEL 1 EXIT /B 1 

Modified: subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd (original)
+++ subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd Sat Oct  6 03:59:33 2012
@@ -25,7 +25,7 @@ IF ERRORLEVEL 1 EXIT /B 1
 
 PUSHD ..\deps
 
-nant gen-dev -D:wc=..\build -D:impBase=../deps/build/win32 %NANTARGS%
+nant gen-dev -D:wc=..\build -D:impBase=../deps/build/win32 -D:botBuild=true %NANTARGS%
 IF ERRORLEVEL 1 EXIT /B 1
 
 POPD

Propchange: subversion/branches/inheritable-props/tools/client-side/svn-bench/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sat Oct  6 03:59:33 2012
@@ -0,0 +1,3 @@
+svn-bench
+svn.1
+.libs

Modified: subversion/branches/inheritable-props/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/dist/backport.pl?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/dist/backport.pl (original)
+++ subversion/branches/inheritable-props/tools/dist/backport.pl Sat Oct  6 03:59:33 2012
@@ -126,9 +126,9 @@ EOF
 reinteg_rev=\`$SVN info $STATUS | sed -ne 's/Last Changed Rev: //p'\`
 if $WET_RUN; then
   # Sleep to avoid out-of-order commit notifications
-  if [ -n "$YES" ]; then sleep 15; fi
+  if [ -n "\$YES" ]; then sleep 15; fi
   $SVNq rm $BRANCHES/$entry{branch} -m "Remove the '$entry{branch}' branch, reintegrated in r\$reinteg_rev."
-  if [ -n "$YES" ]; then sleep 1; fi
+  if [ -n "\$YES" ]; then sleep 1; fi
 else
   echo "Removing reintegrated '$entry{branch}' branch"
 fi
@@ -229,6 +229,10 @@ sub main {
   usage, exit 0 if @ARGV;
   usage, exit 1 unless -r $STATUS;
 
+  # Because we use the ':normal' command in Vim...
+  die "A vim with the +ex_extra feature is required"
+      if `${VIM} --version` !~ /[+]ex_extra/;
+
   @ARGV = $STATUS;
 
   # Skip most of the file

Propchange: subversion/branches/inheritable-props/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
  Merged /subversion/branches/10Gb/tools/dist/make-deps-tarball.sh:r1388394,1388636,1388639,1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390216,1390407
  Merged /subversion/trunk/tools/dist/make-deps-tarball.sh:r1383998-1394910

Modified: subversion/branches/inheritable-props/tools/dist/nightly.sh
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/dist/nightly.sh?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/dist/nightly.sh (original)
+++ subversion/branches/inheritable-props/tools/dist/nightly.sh Sat Oct  6 03:59:33 2012
@@ -55,10 +55,10 @@ head=`$svn info $repo/trunk | grep '^Rev
 # Get the latest versions of the rolling scripts
 for i in release.py dist.sh
 do 
-  $svn export -r $head $repo/trunk/tools/dist/$i@$head $dir/$i
+  $svn export --force -r $head $repo/trunk/tools/dist/$i@$head $dir/$i
 done
 # We also need ezt
-$svn export -r $head $repo/trunk/build/generator/ezt.py@$head $dir/ezt.py
+$svn export --force -r $head $repo/trunk/build/generator/ezt.py@$head $dir/ezt.py
 
 # Create the environment
 cd roll

Modified: subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c (original)
+++ subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c Sat Oct  6 03:59:33 2012
@@ -61,23 +61,23 @@ enum fragment_kind_t
 
 typedef struct fragment_t
 {
-  apr_off_t position;
+  apr_int64_t position;
   void *data;
   enum fragment_kind_t kind;
 } fragment_t;
 
 typedef struct revision_location_t
 {
-  apr_off_t offset;
-  apr_off_t changes;
-  apr_off_t changes_len;
-  apr_off_t end;  
+  apr_int64_t offset;
+  apr_int64_t changes;
+  apr_int64_t changes_len;
+  apr_int64_t end;  
 } revision_location_t;
 
 typedef struct location_t
 {
-  apr_off_t offset;
-  apr_off_t size;
+  apr_int64_t offset;
+  apr_int64_t size;
 } location_t;
 
 typedef struct direntry_t
@@ -98,7 +98,7 @@ typedef struct representation_t
 {
   location_t original;
   location_t target;
-  apr_off_t header_size;
+  apr_int64_t header_size;
   struct representation_t *delta_base;
   revision_info_t *revision;
   directory_t *dir;
@@ -153,7 +153,7 @@ typedef struct content_cache_t
 typedef struct dir_cache_entry_t
 {
   svn_revnum_t revision;
-  apr_off_t offset;
+  apr_int64_t offset;
   
   apr_hash_t *hash;
 } dir_cache_entry_t;
@@ -171,7 +171,7 @@ typedef struct dir_cache_t
 typedef struct window_cache_entry_t
 {
   svn_revnum_t revision;
-  apr_off_t offset;
+  apr_int64_t offset;
 
   svn_stringbuf_t *window;
 } window_cache_entry_t;
@@ -320,6 +320,7 @@ get_content(svn_string_t **data,
   apr_file_t *file;
   revision_info_t *revision_info;
   svn_stringbuf_t *temp;
+  apr_off_t temp_offset;
   
   svn_string_t *result = get_cached_content(fs->cache, revision);
   if (result)
@@ -340,8 +341,11 @@ get_content(svn_string_t **data,
                                      scratch_pool);
   temp->len = revision_info->original.end - revision_info->original.offset;
   SVN_ERR(open_rev_or_pack_file(&file, fs, revision, scratch_pool));
-  SVN_ERR(svn_io_file_seek(file, APR_SET, &revision_info->original.offset,
+
+  temp_offset = (apr_off_t)revision_info->original.offset;
+  SVN_ERR(svn_io_file_seek(file, APR_SET, &temp_offset,
                            scratch_pool));
+  revision_info->original.offset = temp_offset;
   SVN_ERR(svn_io_file_read(file, temp->data, &temp->len, scratch_pool));
 
   set_cached_content(fs->cache, revision,
@@ -369,7 +373,7 @@ create_dir_cache(apr_pool_t *pool,
 static apr_size_t
 get_dir_cache_index(fs_fs_t *fs,
                     svn_revnum_t revision,
-                    apr_off_t offset)
+                    apr_int64_t offset)
 {
   return (revision + offset * 0xd1f3da69) % fs->dir_cache->entry_count;
 }
@@ -385,7 +389,7 @@ get_cached_dir(fs_fs_t *fs,
                representation_t *representation)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_off_t offset = representation->original.offset;
+  apr_int64_t offset = representation->original.offset;
 
   apr_size_t i = get_dir_cache_index(fs, revision, offset);
   dir_cache_entry_t *entry = &fs->dir_cache->entries[i];
@@ -401,7 +405,7 @@ set_cached_dir(fs_fs_t *fs,
                apr_hash_t *hash)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_off_t offset = representation->original.offset;
+  apr_int64_t offset = representation->original.offset;
 
   apr_size_t i = get_dir_cache_index(fs, revision, offset);
   dir_cache_entry_t *entry = &fs->dir_cache->entries[i];
@@ -446,7 +450,7 @@ create_window_cache(apr_pool_t *pool,
 static apr_size_t
 get_window_cache_index(fs_fs_t *fs,
                        svn_revnum_t revision,
-                       apr_off_t offset)
+                       apr_int64_t offset)
 {
   return (revision + offset * 0xd1f3da69) % fs->window_cache->entry_count;
 }
@@ -457,7 +461,7 @@ get_cached_window(fs_fs_t *fs,
                   apr_pool_t *pool)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_off_t offset = representation->original.offset;
+  apr_int64_t offset = representation->original.offset;
 
   apr_size_t i = get_window_cache_index(fs, revision, offset);
   window_cache_entry_t *entry = &fs->window_cache->entries[i];
@@ -473,7 +477,7 @@ set_cached_window(fs_fs_t *fs,
                   svn_stringbuf_t *window)
 {
   svn_revnum_t revision = representation->revision->revision;
-  apr_off_t offset = representation->original.offset;
+  apr_int64_t offset = representation->original.offset;
 
   apr_size_t i = get_window_cache_index(fs, revision, offset);
   window_cache_entry_t *entry = &fs->window_cache->entries[i];
@@ -512,7 +516,7 @@ read_manifest(apr_array_header_t **manif
   /* While we're here, let's just read the entire manifest file into an array,
      so we can cache the entire thing. */
   iterpool = svn_pool_create(pool);
-  *manifest = apr_array_make(pool, fs->max_files_per_dir, sizeof(apr_off_t));
+  *manifest = apr_array_make(pool, fs->max_files_per_dir, sizeof(apr_int64_t));
   while (1)
     {
       svn_stringbuf_t *sb;
@@ -530,7 +534,7 @@ read_manifest(apr_array_header_t **manif
         return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
                                  _("Manifest offset '%s' too large"),
                                  sb->data);
-      APR_ARRAY_PUSH(*manifest, apr_off_t) = (apr_off_t)val;
+      APR_ARRAY_PUSH(*manifest, apr_int64_t) = (apr_int64_t)val;
     }
   svn_pool_destroy(iterpool);
 
@@ -538,12 +542,12 @@ read_manifest(apr_array_header_t **manif
 }
 
 static svn_error_t *
-read_revision_header(apr_off_t *changes,
-                     apr_off_t *changes_len,
-                     apr_off_t *root_noderev,
+read_revision_header(apr_int64_t *changes,
+                     apr_int64_t *changes_len,
+                     apr_int64_t *root_noderev,
                      svn_stringbuf_t *file_content,
-                     apr_off_t start,
-                     apr_off_t end,
+                     apr_int64_t start,
+                     apr_int64_t end,
                      apr_pool_t *pool)
 {
   char buf[64];
@@ -580,9 +584,9 @@ read_revision_header(apr_off_t *changes,
   *(char *)space = 0;
   
   SVN_ERR(svn_cstring_atoi64(&val, line+1));
-  *root_noderev = (apr_off_t)val;
+  *root_noderev = (apr_int64_t)val;
   SVN_ERR(svn_cstring_atoi64(&val, space+1));
-  *changes = (apr_off_t)val;
+  *changes = (apr_int64_t)val;
   *changes_len = end - *changes - start - (buf + len - line) + 1;
 
   return SVN_NO_ERROR;
@@ -719,12 +723,12 @@ static int
 compare_noderev_offsets(const void *data, const void *key)
 {
   return (*(const noderev_t **)data)->original.offset
-       - *(const apr_off_t *)key;
+       - *(const apr_int64_t *)key;
 }
 
 static svn_error_t *
 parse_revnode_pos(revision_info_t **revision_info,
-                  apr_off_t *offset,
+                  apr_int64_t *offset,
                   fs_fs_t *fs,
                   svn_string_t *id)
 {
@@ -756,7 +760,7 @@ parse_revnode_pos(revision_info_t **revi
 static svn_error_t *
 find_noderev(noderev_t **result,
             revision_info_t *revision_info,
-            apr_off_t offset)
+            apr_int64_t offset)
 {
   int idx = svn_sort__bsearch_lower_bound(&offset,
                                           revision_info->node_revs,
@@ -780,7 +784,7 @@ parse_pred(noderev_t **result,
            fs_fs_t *fs,
            svn_string_t *id)
 {
-  apr_off_t offset;
+  apr_int64_t offset;
   revision_info_t *revision_info;
 
   SVN_ERR(parse_revnode_pos(&revision_info, &offset, fs, id));
@@ -793,7 +797,7 @@ static int
 compare_representation_offsets(const void *data, const void *key)
 {
   return (*(const representation_t **)data)->original.offset
-       - *(const apr_off_t *)key;
+       - *(const apr_int64_t *)key;
 }
 
 static representation_t *
@@ -801,7 +805,7 @@ find_representation(int *idx,
                     fs_fs_t *fs,
                     revision_info_t **revision_info,
                     int revision,
-                    apr_off_t offset)
+                    apr_int64_t offset)
 {
   revision_info_t *info;
   *idx = -1;
@@ -835,11 +839,11 @@ find_representation(int *idx,
 
 static svn_error_t *
 read_rep_base(representation_t **representation,
-              apr_off_t *header_size,
+              apr_int64_t *header_size,
               svn_boolean_t *is_plain,
               fs_fs_t *fs,
               svn_stringbuf_t *file_content,
-              apr_off_t offset,
+              apr_int64_t offset,
               apr_pool_t *pool,
               apr_pool_t *scratch_pool)
 {
@@ -892,7 +896,7 @@ parse_representation(representation_t **
   representation_t *result;
   int revision;
 
-  apr_off_t offset;
+  apr_int64_t offset;
   svn_filesize_t size;
   int idx;
 
@@ -932,7 +936,7 @@ read_windows(apr_array_header_t **window
   svn_string_t *content;
   svn_string_t data;
   svn_stream_t *stream;
-  apr_off_t offset = representation->original.offset
+  apr_int64_t offset = representation->original.offset
                    + representation->header_size;
   char version;
   apr_size_t len = sizeof(version);
@@ -973,7 +977,7 @@ read_plain(svn_stringbuf_t **content,
            apr_pool_t *pool)
 {
   svn_string_t *data;
-  apr_off_t offset = representation->original.offset
+  apr_int64_t offset = representation->original.offset
                    + representation->header_size;
 
   SVN_ERR(get_content(&data, fs, representation->revision->revision, pool));
@@ -1047,7 +1051,7 @@ static svn_error_t *
 read_noderev(noderev_t **noderev,
              fs_fs_t *fs,
              svn_stringbuf_t *file_content,
-             apr_off_t offset,
+             apr_int64_t offset,
              revision_info_t *revision_info,
              apr_pool_t *pool,
              apr_pool_t *scratch_pool);
@@ -1056,7 +1060,7 @@ static svn_error_t *
 get_noderev(noderev_t **noderev,
             fs_fs_t *fs,
             svn_stringbuf_t *file_content,
-            apr_off_t offset,
+            apr_int64_t offset,
             revision_info_t *revision_info,
             apr_pool_t *pool,
             apr_pool_t *scratch_pool)
@@ -1147,7 +1151,7 @@ parse_dir(fs_fs_t *fs,
     {
       const char *name = svn__apr_hash_index_key(hi);
       svn_string_t *str_val = svn__apr_hash_index_val(hi);
-      apr_off_t offset;
+      apr_int64_t offset;
       revision_info_t *revision_info;
       apr_size_t name_len = strlen(name);
       direntry_t *entry = base_dir
@@ -1185,7 +1189,7 @@ static svn_error_t *
 read_noderev(noderev_t **noderev,
              fs_fs_t *fs,
              svn_stringbuf_t *file_content,
-             apr_off_t offset,
+             apr_int64_t offset,
              revision_info_t *revision_info,
              apr_pool_t *pool,
              apr_pool_t *scratch_pool)
@@ -1293,7 +1297,7 @@ read_pack_file(fs_fs_t *fs,
 
   for (i = 0; i < manifest->nelts; ++i)
     {
-      apr_off_t root_node_offset;
+      apr_int64_t root_node_offset;
       svn_string_t rev_content;
   
       revision_info_t *info = apr_pcalloc(pool, sizeof(*info));
@@ -1301,15 +1305,15 @@ read_pack_file(fs_fs_t *fs,
       info->representations = apr_array_make(iter_pool, 4, sizeof(representation_t*));
 
       info->revision = base + i;
-      info->original.offset = APR_ARRAY_IDX(manifest, i, apr_off_t);
+      info->original.offset = APR_ARRAY_IDX(manifest, i, apr_int64_t);
       info->original.end = i+1 < manifest->nelts
-                         ? APR_ARRAY_IDX(manifest, i+1 , apr_off_t)
+                         ? APR_ARRAY_IDX(manifest, i+1 , apr_int64_t)
                          : file_content->len;
       SVN_ERR(read_revision_header(&info->original.changes,
                                    &info->original.changes_len,
                                    &root_node_offset,
                                    file_content,
-                                   APR_ARRAY_IDX(manifest, i , apr_off_t),
+                                   APR_ARRAY_IDX(manifest, i , apr_int64_t),
                                    info->original.end,
                                    iter_pool));
 
@@ -1340,7 +1344,7 @@ read_revision_file(fs_fs_t *fs,
                    svn_revnum_t revision,
                    apr_pool_t *pool)
 {
-  apr_off_t root_node_offset;
+  apr_int64_t root_node_offset;
   apr_pool_t *local_pool = svn_pool_create(pool);
   svn_stringbuf_t *file_content;
   svn_string_t rev_content;
@@ -1995,7 +1999,8 @@ write_revisions(fs_fs_t *fs,
       for (i = 0; i < pack->info->nelts; ++i)
         {
           revision_info_t *info = APR_ARRAY_IDX(pack->info, i, revision_info_t*);
-          svn_stream_printf(stream, itempool, "%ld\n", info->target.offset);
+          svn_stream_printf(stream, itempool, "%" APR_UINT64_T_FMT "\n",
+                            info->target.offset);
           svn_pool_clear(itempool);
         }
     }
@@ -2175,7 +2180,8 @@ update_text(svn_stringbuf_t *node_rev,
       char *newline_pos = strchr(val_pos, '\n');
       svn_checksum_t checksum = {representation->dir->target_md5,
                                  svn_checksum_md5};
-      const char* temp = apr_psprintf(scratch_pool, "%ld %ld %ld %ld %s",
+      const char* temp = apr_psprintf(scratch_pool, "%ld %" APR_UINT64_T_FMT " %" 
+                                      APR_UINT64_T_FMT" %" APR_SIZE_T_FMT " %s",
                                       representation->revision->revision,
                                       representation->target.offset - representation->revision->target.offset,
                                       representation->target.size,
@@ -2194,7 +2200,7 @@ update_text(svn_stringbuf_t *node_rev,
       
       val_pos = end_pos + 1;
       end_pos = strchr(strchr(val_pos, ' ') + 1, ' ');
-      temp = apr_psprintf(scratch_pool, "%ld %ld",
+      temp = apr_psprintf(scratch_pool, "%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT,
                           representation->target.offset - representation->revision->target.offset,
                           representation->target.size);
 
@@ -2223,7 +2229,7 @@ get_fragment_content(svn_string_t **cont
       case header_fragment:
         info = fragment->data;
         *content = svn_string_createf(pool,
-                                      "\n%ld %ld\n",
+                                      "\n%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
                                       info->root_noderev->target.offset - info->target.offset,
                                       info->target.changes);
         return SVN_NO_ERROR;
@@ -2260,7 +2266,7 @@ get_fragment_content(svn_string_t **cont
               header = svn_stringbuf_create("DELTA\n", pool);
             else
               header = svn_stringbuf_createf(pool,
-                                             "DELTA %ld %ld %ld\n",
+                                             "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
                                              representation->delta_base->revision->revision,
                                              representation->delta_base->target.offset
                                              - representation->delta_base->revision->target.offset,
@@ -2303,7 +2309,7 @@ get_fragment_content(svn_string_t **cont
               {
                 representation_t *base_rep = representation->delta_base;
                 header = svn_stringbuf_createf(pool,
-                                               "DELTA %ld %ld %ld\n",
+                                               "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
                                                base_rep->revision->revision,
                                                base_rep->target.offset - base_rep->revision->target.offset,
                                                base_rep->target.size);

Modified: subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py (original)
+++ subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py Sat Oct  6 03:59:33 2012
@@ -46,7 +46,7 @@ def svncmd_info(repo, revision):
     #print data
     return {'author': data[0],
             'date': data[1],
-            'log': "".join(data[3:])}
+            'log': "\n".join(data[3:])}
 
 def svncmd_dirs(repo, revision):
     cmd = "%s dirs-changed  -r %s %s" % (SVNLOOK, revision, repo)
@@ -68,6 +68,7 @@ def do_put(body):
 
 
 def main(repo, revision):
+    revision = revision.lstrip('r')
     i = svncmd_info(repo, revision)
     data = {'revision': int(revision),
             'dirs_changed': [],

Modified: subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py (original)
+++ subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py Sat Oct  6 03:59:33 2012
@@ -137,13 +137,13 @@ class XMLStreamHandler(xml.sax.handler.C
     elif self.chars and self.rev:
       value = self.chars.strip()
       if name == 'path':
-        self.rev.dirs_changed.append(value)
+        self.rev.dirs_changed.append(value.decode('unicode_escape'))
       elif name == 'author':
-        self.rev.author = value
+        self.rev.author = value.decode('unicode_escape')
       elif name == 'date':
-        self.rev.date = value
+        self.rev.date = value.decode('unicode_escape')
       elif name == 'log':
-        self.rev.log = value
+        self.rev.log = value.decode('unicode_escape')
 
     # Toss out any accumulated characters for this element.
     self.chars = ''

Modified: subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py (original)
+++ subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py Sat Oct  6 03:59:33 2012
@@ -73,12 +73,15 @@ import time
 
 class Revision:
     def __init__(self, r):
+        # Don't escape the values; json handles binary values fine.
+        # ET will happily emit literal control characters (eg, NUL),
+        # thus creating invalid XML, so the XML code paths do escaping.
         self.rev = r.get('revision')
         self.repos = r.get('repos')
-        self.dirs_changed = [x.encode('unicode_escape') for x in r.get('dirs_changed')]
-        self.author = r.get('author').encode('unicode_escape')
-        self.log = r.get('log').encode('unicode_escape')
-        self.date = r.get('date').encode('unicode_escape')
+        self.dirs_changed = [x for x in r.get('dirs_changed')]
+        self.author = r.get('author')
+        self.log = r.get('log')
+        self.date = r.get('date')
 
     def render_commit(self, format):
         if format == "json":
@@ -90,13 +93,13 @@ class Revision:
                                           'date': self.date}}) +","
         elif format == "xml":
             c = ET.Element('commit', {'repository': self.repos, 'revision': "%d" % (self.rev)})
-            ET.SubElement(c, 'author').text = self.author
-            ET.SubElement(c, 'date').text = self.date
-            ET.SubElement(c, 'log').text = self.log
+            ET.SubElement(c, 'author').text = self.author.encode('unicode_escape')
+            ET.SubElement(c, 'date').text = self.date.encode('unicode_escape')
+            ET.SubElement(c, 'log').text = self.log.encode('unicode_escape')
             d = ET.SubElement(c, 'dirs_changed')
             for p in self.dirs_changed:
                 x = ET.SubElement(d, 'path')
-                x.text = p
+                x.text = p.encode('unicode_escape')
             str = ET.tostring(c, 'UTF-8') + "\n"
             return str[39:]
         else:
@@ -112,7 +115,7 @@ class Revision:
             d = ET.SubElement(c, 'dirs_changed')
             for p in self.dirs_changed:
                 x = ET.SubElement(d, 'path')
-                x.text = p
+                x.text = p.encode('unicode_escape')
             str = ET.tostring(c, 'UTF-8') + "\n"
             return str[39:]
         else: