You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by iv...@apache.org on 2014/06/25 20:16:51 UTC

svn commit: r1605535 [3/3] - in /subversion/branches/remove-log-addressing: ./ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindings/javahl/tests/org/apache/subversion/javahl/ subversion/bin...

Modified: subversion/branches/remove-log-addressing/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_repos/log.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/remove-log-addressing/subversion/libsvn_repos/log.c Wed Jun 25 18:16:50 2014
@@ -189,21 +189,29 @@ detect_changed(apr_hash_t **changed,
 {
   apr_hash_t *changes = prefetched_changes;
   apr_hash_index_t *hi;
-  apr_pool_t *subpool;
+  apr_pool_t *iterpool;
   svn_boolean_t found_readable = FALSE;
   svn_boolean_t found_unreadable = FALSE;
 
-  *changed = svn_hash__make(pool);
+  /* If we create the CHANGES hash ourselves, we can reuse it as the
+   * result hash as it contains the exact same keys - but with _all_
+   * values being replaced by structs of a different type. */
   if (changes == NULL)
-    SVN_ERR(svn_fs_paths_changed2(&changes, root, pool));
+    {
+      SVN_ERR(svn_fs_paths_changed2(&changes, root, pool));
+      *changed = changes;
+    }
+  else
+    {
+      *changed = svn_hash__make(pool);
+    }
 
   if (apr_hash_count(changes) == 0)
     /* No paths changed in this revision?  Uh, sure, I guess the
        revision is readable, then.  */
     return SVN_NO_ERROR;
 
-  subpool = svn_pool_create(pool);
-
+  iterpool = svn_pool_create(pool);
   for (hi = apr_hash_first(pool, changes); hi; hi = apr_hash_next(hi))
     {
       /* NOTE:  Much of this loop is going to look quite similar to
@@ -215,7 +223,7 @@ detect_changed(apr_hash_t **changed,
       char action;
       svn_log_changed_path2_t *item;
 
-      svn_pool_clear(subpool);
+      svn_pool_clear(iterpool);
 
       /* Skip path if unreadable. */
       if (authz_read_func)
@@ -223,7 +231,7 @@ detect_changed(apr_hash_t **changed,
           svn_boolean_t readable;
           SVN_ERR(authz_read_func(&readable,
                                   root, path,
-                                  authz_read_baton, subpool));
+                                  authz_read_baton, iterpool));
           if (! readable)
             {
               found_unreadable = TRUE;
@@ -281,26 +289,26 @@ detect_changed(apr_hash_t **changed,
               svn_revnum_t prev_rev;
               const char *parent_path, *name;
 
-              svn_fspath__split(&parent_path, &name, path, subpool);
+              svn_fspath__split(&parent_path, &name, path, iterpool);
 
               SVN_ERR(svn_fs_node_history2(&history, root, parent_path,
-                                           subpool, subpool));
+                                           iterpool, iterpool));
 
               /* Two calls because the first call returns the original
                  revision as the deleted child means it is 'interesting' */
-              SVN_ERR(svn_fs_history_prev2(&history, history, TRUE, subpool,
-                                           subpool));
-              SVN_ERR(svn_fs_history_prev2(&history, history, TRUE, subpool,
-                                           subpool));
+              SVN_ERR(svn_fs_history_prev2(&history, history, TRUE, iterpool,
+                                           iterpool));
+              SVN_ERR(svn_fs_history_prev2(&history, history, TRUE, iterpool,
+                                           iterpool));
 
               SVN_ERR(svn_fs_history_location(&parent_path, &prev_rev, history,
-                                              subpool));
-              SVN_ERR(svn_fs_revision_root(&check_root, fs, prev_rev, subpool));
-              check_path = svn_fspath__join(parent_path, name, subpool);
+                                              iterpool));
+              SVN_ERR(svn_fs_revision_root(&check_root, fs, prev_rev, iterpool));
+              check_path = svn_fspath__join(parent_path, name, iterpool);
             }
 
           SVN_ERR(svn_fs_check_path(&item->node_kind, check_root, check_path,
-                                    subpool));
+                                    iterpool));
         }
 
 
@@ -315,7 +323,7 @@ detect_changed(apr_hash_t **changed,
           if (!change->copyfrom_known)
             {
               SVN_ERR(svn_fs_copied_from(&copyfrom_rev, &copyfrom_path,
-                                        root, path, subpool));
+                                        root, path, iterpool));
               copyfrom_path = apr_pstrdup(pool, copyfrom_path);
             }
 
@@ -328,10 +336,10 @@ detect_changed(apr_hash_t **changed,
                   svn_fs_root_t *copyfrom_root;
 
                   SVN_ERR(svn_fs_revision_root(&copyfrom_root, fs,
-                                               copyfrom_rev, subpool));
+                                               copyfrom_rev, iterpool));
                   SVN_ERR(authz_read_func(&readable,
                                           copyfrom_root, copyfrom_path,
-                                          authz_read_baton, subpool));
+                                          authz_read_baton, iterpool));
                   if (! readable)
                     found_unreadable = TRUE;
                 }
@@ -347,7 +355,7 @@ detect_changed(apr_hash_t **changed,
       apr_hash_set(*changed, path, path_len, item);
     }
 
-  svn_pool_destroy(subpool);
+  svn_pool_destroy(iterpool);
 
   if (! found_readable)
     /* Every changed-path was unreadable. */
@@ -1300,6 +1308,8 @@ send_log(svn_revnum_t rev,
      revision. */
   if (found_rev_of_interest)
     {
+      apr_pool_t *scratch_pool;
+
       /* Is REV a merged revision we've already sent? */
       if (nested_merges && handling_merged_revision)
         {
@@ -1317,12 +1327,14 @@ send_log(svn_revnum_t rev,
             }
         }
 
-      return (*receiver)(receiver_baton, log_entry, pool);
-    }
-  else
-    {
-      return SVN_NO_ERROR;
+      /* Pass a scratch pool to ensure no temporary state stored
+         by the receiver callback persists. */
+      scratch_pool = svn_pool_create(pool);
+      SVN_ERR(receiver(receiver_baton, log_entry, scratch_pool));
+      svn_pool_destroy(scratch_pool);
     }
+
+  return SVN_NO_ERROR;
 }
 
 /* This controls how many history objects we keep open.  For any targets

Modified: subversion/branches/remove-log-addressing/subversion/libsvn_repos/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_repos/repos.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/libsvn_repos/repos.c (original)
+++ subversion/branches/remove-log-addressing/subversion/libsvn_repos/repos.c Wed Jun 25 18:16:50 2014
@@ -280,6 +280,16 @@ create_locks(svn_repos_t *repos, apr_poo
   "# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and"        NL \
   "# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/"          NL
 
+#define HOOKS_QUOTE_ARGUMENTS_TEXT                                            \
+  "# CAUTION:"                                                             NL \
+  "# For security reasons, you MUST always properly quote arguments when"  NL \
+  "# you use them, as those arguments could contain whitespace or other"   NL \
+  "# problematic characters. Additionally, you should delimit the list"    NL \
+  "# of options with \"--\" before passing the arguments, so malicious"    NL \
+  "# clients cannot bootleg unexpected options to the commands your"       NL \
+  "# script aims to execute."                                              NL \
+  "# For similar reasons, you should also add a trailing @ to URLs which"  NL \
+  "# are passed to SVN commands accepting URLs with peg revisions."        NL
 
 static svn_error_t *
 create_hooks(svn_repos_t *repos, apr_pool_t *pool)
@@ -354,6 +364,8 @@ create_hooks(svn_repos_t *repos, apr_poo
 "# "                                                                         NL
 HOOKS_ENVIRONMENT_TEXT
 "# "                                                                         NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter."          NL
 PREWRITTEN_HOOKS_TEXT
 ""                                                                           NL
@@ -439,6 +451,8 @@ PREWRITTEN_HOOKS_TEXT
 "#"                                                                          NL
 HOOKS_ENVIRONMENT_TEXT
 "# "                                                                         NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter."          NL
 PREWRITTEN_HOOKS_TEXT
 ""                                                                           NL
@@ -522,6 +536,8 @@ PREWRITTEN_HOOKS_TEXT
 "#"                                                                          NL
 HOOKS_ENVIRONMENT_TEXT
 "# "                                                                         NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter."          NL
 PREWRITTEN_HOOKS_TEXT
 ""                                                                           NL
@@ -594,6 +610,8 @@ PREWRITTEN_HOOKS_TEXT
 "# '"SCRIPT_NAME".bat' or '"SCRIPT_NAME".exe',"                              NL
 "# but the basic idea is the same."                                          NL
 "#"                                                                          NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter:"          NL
 ""                                                                           NL
 "REPOS=\"$1\""                                                               NL
@@ -681,6 +699,8 @@ PREWRITTEN_HOOKS_TEXT
 "# '"SCRIPT_NAME".bat' or '"SCRIPT_NAME".exe',"                              NL
 "# but the basic idea is the same."                                          NL
 "#"                                                                          NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter:"          NL
 ""                                                                           NL
 "REPOS=\"$1\""                                                               NL
@@ -767,6 +787,8 @@ PREWRITTEN_HOOKS_TEXT
 "# "                                                                         NL
 HOOKS_ENVIRONMENT_TEXT
 "# "                                                                         NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter."          NL
 PREWRITTEN_HOOKS_TEXT
 ""                                                                           NL
@@ -830,6 +852,8 @@ PREWRITTEN_HOOKS_TEXT
 "# '"SCRIPT_NAME".bat' or '"SCRIPT_NAME".exe',"                              NL
 "# but the basic idea is the same."                                          NL
 "# "                                                                         NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter:"          NL
 ""                                                                           NL
 "REPOS=\"$1\""                                                               NL
@@ -888,6 +912,8 @@ PREWRITTEN_HOOKS_TEXT
 "# '"SCRIPT_NAME".bat' or '"SCRIPT_NAME".exe',"                              NL
 "# but the basic idea is the same."                                          NL
 "# "                                                                         NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter:"          NL
 ""                                                                           NL
 "REPOS=\"$1\""                                                               NL
@@ -951,6 +977,8 @@ PREWRITTEN_HOOKS_TEXT
 "# "                                                                         NL
 HOOKS_ENVIRONMENT_TEXT
 "# "                                                                         NL
+HOOKS_QUOTE_ARGUMENTS_TEXT
+"# "                                                                         NL
 "# Here is an example hook script, for a Unix /bin/sh interpreter."          NL
 PREWRITTEN_HOOKS_TEXT
 ""                                                                           NL

Modified: subversion/branches/remove-log-addressing/subversion/libsvn_subr/checksum.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_subr/checksum.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/libsvn_subr/checksum.c (original)
+++ subversion/branches/remove-log-addressing/subversion/libsvn_subr/checksum.c Wed Jun 25 18:16:50 2014
@@ -739,7 +739,7 @@ close_handler(void *baton)
  * function does not enforce any such restriction.  Also, the caller must
  * make sure that DIGEST refers to a buffer of sufficient length.
  */
-svn_stream_t *
+static svn_stream_t *
 wrap_write_stream(svn_checksum_t **checksum,
                   unsigned char *digest,
                   svn_stream_t *inner_stream,

Modified: subversion/branches/remove-log-addressing/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_subr/io.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/remove-log-addressing/subversion/libsvn_subr/io.c Wed Jun 25 18:16:50 2014
@@ -2839,6 +2839,10 @@ svn_io_start_cmd3(apr_proc_t *cmd_proc,
     {
       const char *path_apr;
 
+      /* APR doesn't like our canonical path format for current directory */
+      if (path[0] == '\0')
+        path = ".";
+
       SVN_ERR(cstring_from_utf8(&path_apr, path, pool));
       apr_err = apr_procattr_dir_set(cmdproc_attr, path_apr);
       if (apr_err)

Modified: subversion/branches/remove-log-addressing/subversion/libsvn_subr/string.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/libsvn_subr/string.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/libsvn_subr/string.c (original)
+++ subversion/branches/remove-log-addressing/subversion/libsvn_subr/string.c Wed Jun 25 18:16:50 2014
@@ -1056,7 +1056,7 @@ svn__strtoul(const char* buffer, const c
    */
   while (1)
     {
-      unsigned long c = *buffer - '0';
+      unsigned long c = (unsigned char)*buffer - (unsigned char)'0';
       if (c > 9)
         break;
 
@@ -1068,6 +1068,15 @@ svn__strtoul(const char* buffer, const c
   return result;
 }
 
+long
+svn__strtol(const char* buffer, const char** end)
+{
+  if (*buffer == '-')
+    return -(long)svn__strtoul(buffer+1, end);
+  else
+    return (long)svn__strtoul(buffer, end);
+}
+
 
 /* "Precalculated" itoa values for 2 places (including leading zeros).
  * For maximum performance, make sure all table entries are word-aligned.

Modified: subversion/branches/remove-log-addressing/subversion/mod_dav_svn/dav_svn.h
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/mod_dav_svn/dav_svn.h?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/mod_dav_svn/dav_svn.h (original)
+++ subversion/branches/remove-log-addressing/subversion/mod_dav_svn/dav_svn.h Wed Jun 25 18:16:50 2014
@@ -329,6 +329,10 @@ svn_boolean_t dav_svn__get_fulltext_cach
 /* for the repository referred to by this request, is revprop caching active? */
 svn_boolean_t dav_svn__get_revprop_cache_flag(request_rec *r);
 
+/* has block read mode been enabled for the repository referred to by this
+ * request? */
+svn_boolean_t dav_svn__get_block_read_flag(request_rec *r);
+
 /* for the repository referred to by this request, are subrequests bypassed?
  * A function pointer if yes, NULL if not.
  */

Modified: subversion/branches/remove-log-addressing/subversion/svn/log-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/svn/log-cmd.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/svn/log-cmd.c (original)
+++ subversion/branches/remove-log-addressing/subversion/svn/log-cmd.c Wed Jun 25 18:16:50 2014
@@ -364,6 +364,7 @@ svn_cl__log_entry_receiver(void *baton,
     {
       apr_array_header_t *sorted_paths;
       int i;
+      apr_pool_t *iterpool;
 
       /* Get an array of sorted hash keys. */
       sorted_paths = svn_sort__hash(log_entry->changed_paths2,
@@ -371,6 +372,7 @@ svn_cl__log_entry_receiver(void *baton,
 
       SVN_ERR(svn_cmdline_printf(pool,
                                  _("Changed paths:\n")));
+      iterpool = svn_pool_create(pool);
       for (i = 0; i < sorted_paths->nelts; i++)
         {
           svn_sort__item_t *item = &(APR_ARRAY_IDX(sorted_paths, i,
@@ -379,6 +381,8 @@ svn_cl__log_entry_receiver(void *baton,
           svn_log_changed_path2_t *log_item = item->value;
           const char *copy_data = "";
 
+          svn_pool_clear(iterpool);
+
           if (lb->ctx->cancel_func)
             SVN_ERR(lb->ctx->cancel_func(lb->ctx->cancel_baton));
 
@@ -386,34 +390,39 @@ svn_cl__log_entry_receiver(void *baton,
               && SVN_IS_VALID_REVNUM(log_item->copyfrom_rev))
             {
               copy_data
-                = apr_psprintf(pool,
+                = apr_psprintf(iterpool,
                                _(" (from %s:%ld)"),
                                log_item->copyfrom_path,
                                log_item->copyfrom_rev);
             }
-          SVN_ERR(svn_cmdline_printf(pool, "   %c %s%s\n",
+          SVN_ERR(svn_cmdline_printf(iterpool, "   %c %s%s\n",
                                      log_item->action, path,
                                      copy_data));
         }
+      svn_pool_destroy(iterpool);
     }
 
   if (lb->merge_stack && lb->merge_stack->nelts > 0)
     {
       int i;
+      apr_pool_t *iterpool;
 
       /* Print the result of merge line */
       if (log_entry->subtractive_merge)
         SVN_ERR(svn_cmdline_printf(pool, _("Reverse merged via:")));
       else
         SVN_ERR(svn_cmdline_printf(pool, _("Merged via:")));
+      iterpool = svn_pool_create(pool);
       for (i = 0; i < lb->merge_stack->nelts; i++)
         {
           svn_revnum_t rev = APR_ARRAY_IDX(lb->merge_stack, i, svn_revnum_t);
 
-          SVN_ERR(svn_cmdline_printf(pool, " r%ld%c", rev,
+          svn_pool_clear(iterpool);
+          SVN_ERR(svn_cmdline_printf(iterpool, " r%ld%c", rev,
                                      i == lb->merge_stack->nelts - 1 ?
                                                                   '\n' : ','));
         }
+      svn_pool_destroy(iterpool);
     }
 
   if (message != NULL)

Modified: subversion/branches/remove-log-addressing/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/svn/notify.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/svn/notify.c (original)
+++ subversion/branches/remove-log-addressing/subversion/svn/notify.c Wed Jun 25 18:16:50 2014
@@ -1056,6 +1056,14 @@ notify_body(struct notify_baton *nb,
                  path_local));
       break;
 
+    case svn_wc_notify_commit_finalizing:
+      if (nb->sent_first_txdelta)
+        {
+          SVN_ERR(svn_cmdline_printf(pool, _("done\n")));
+          SVN_ERR(svn_cmdline_printf(pool, _("Committing transaction...")));
+        }
+      break;
+
     default:
       break;
     }

Modified: subversion/branches/remove-log-addressing/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/svn/svn.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/svn/svn.c (original)
+++ subversion/branches/remove-log-addressing/subversion/svn/svn.c Wed Jun 25 18:16:50 2014
@@ -1402,6 +1402,7 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "        ^/   to the repository root\n"
      "        /    to the server root\n"
      "        //   to the URL scheme\n"
+     "      ^/../  to a sibling repository beneath the same SVNParentPath location\n"
      "      Use of the following format is discouraged but is supported for\n"
      "      interoperability with Subversion 1.4 and earlier clients:\n"
      "        LOCALPATH [-r PEG] URL\n"

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/commit_tests.py?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/commit_tests.py Wed Jun 25 18:16:50 2014
@@ -2141,7 +2141,8 @@ def post_commit_hook_test(sbox):
   # filesystem will report an absolute path because that's the way the
   # filesystem is created by this test suite.
   expected_output = [ "Sending        "+ iota_path + "\n",
-                      "Transmitting file data .\n",
+                      "Transmitting file data .done\n",
+                      "Committing transaction...\n",
                       "Committed revision 2.\n",
                       "\n",
                       "Warning: " +

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/depth_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/depth_tests.py?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/depth_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/depth_tests.py Wed Jun 25 18:16:50 2014
@@ -1135,6 +1135,7 @@ def commit_depth_immediates(sbox):
   #    Sending        A/D/G/rho
   #    Sending        iota
   #    Transmitting file data ..
+  #    Committing transaction...
   #    Committed revision 2.
 
   iota_path = sbox.ospath('iota')

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/diff_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/diff_tests.py?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/diff_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/diff_tests.py Wed Jun 25 18:16:50 2014
@@ -4675,6 +4675,59 @@ def diff_switched_file(sbox):
   svntest.actions.run_and_verify_svn(None, expected_output, [],
                                      'diff', '-r', '1', sbox.ospath(''))
 
+def diff_parent_dir(sbox):
+  "diff parent directory"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  svntest.actions.run_and_verify_svnmucc(None, None, [],
+                                         '-U', sbox.repo_url, '-m', 'Q',
+                                         'mkdir', 'A/ZZZ',
+                                         'propset', 'A', 'B', 'A/ZZZ')
+
+  was_cwd = os.getcwd()
+  os.chdir(os.path.join(wc_dir, 'A', 'B'))
+  try:
+    # This currently (1.8.9, 1.9.0 development) triggers an assertion failure
+    # as a non canonical relpath ".." is used as diff target
+
+    expected_output = [
+      'Index: ../ZZZ\n',
+      '===================================================================\n',
+      '--- ../ZZZ	(revision 2)\n',
+      '+++ ../ZZZ	(nonexistent)\n',
+      '\n',
+      'Property changes on: ../ZZZ\n',
+      '___________________________________________________________________\n',
+      'Deleted: A\n',
+      '## -1 +0,0 ##\n',
+      '-B\n',
+      '\ No newline at end of property\n',
+    ]
+
+    svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'diff', '-r', '2', '..')
+
+    expected_output = [
+      'Index: ../../A/ZZZ\n',
+      '===================================================================\n',
+      '--- ../../A/ZZZ	(revision 2)\n',
+      '+++ ../../A/ZZZ	(nonexistent)\n',
+      '\n',
+      'Property changes on: ../../A/ZZZ\n',
+      '___________________________________________________________________\n',
+      'Deleted: A\n',
+      '## -1 +0,0 ##\n',
+      '-B\n',
+      '\ No newline at end of property\n',
+    ]
+
+    svntest.actions.run_and_verify_svn(None, expected_output, [],
+                                     'diff', '-r', '2', '../..')
+  finally:
+    os.chdir(was_cwd)
+
 
 ########################################################################
 #Run the tests
@@ -4762,6 +4815,7 @@ test_list = [ None,
               diff_repo_wc_file_props,
               diff_repo_repo_added_file_mime_type,
               diff_switched_file,
+              diff_parent_dir,
               ]
 
 if __name__ == '__main__':

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=1605535&r1=1605534&r2=1605535&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 Wed Jun 25 18:16:50 2014
@@ -1971,7 +1971,7 @@ def verify_keep_going(sbox):
                                      C_url)
   
   r2 = fsfs_file(sbox.repo_dir, 'revs', '2')
-  fp = open(r2, 'a')
+  fp = open(r2, 'r+b')
   fp.write("""inserting junk to corrupt the rev""")
   fp.close()
   exit_code, output, errput = svntest.main.run_svnadmin("verify",
@@ -1985,6 +1985,7 @@ def verify_keep_going(sbox):
                                             ".*",
                                             ".*Summary.*",
                                             ".*r2: E160004:.*",
+                                            ".*r2: E160004:.*",
                                             ".*r3: E160004:.*",
                                             ".*r3: E160004:.*"])
   exp_err = svntest.verify.RegexListOutput(["svnadmin: E160004:.*",

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/wc.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/wc.py?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/wc.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/svntest/wc.py Wed Jun 25 18:16:50 2014
@@ -590,6 +590,9 @@ class State:
       if line.startswith('DBG:') or line.startswith('Transmitting'):
         continue
 
+      if line.startswith('Committing transaction'):
+        continue
+
       match = _re_parse_commit_ext.search(line)
       if match:
         desc[to_relpath(match.group(4))] = StateItem(verb=match.group(1))

Modified: subversion/branches/remove-log-addressing/subversion/tests/cmdline/trans_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/cmdline/trans_tests.py?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/cmdline/trans_tests.py (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/cmdline/trans_tests.py Wed Jun 25 18:16:50 2014
@@ -584,7 +584,8 @@ def eol_change_is_text_mod(sbox):
 
   # check 1: did new contents get transmitted?
   expected_output = ["Sending        " + foo_path + "\n",
-                     "Transmitting file data .\n",
+                     "Transmitting file data .done\n",
+                     "Committing transaction...\n",
                      "Committed revision 3.\n"]
   svntest.actions.run_and_verify_svn(None, expected_output, [],
                                      'ci', '-m', 'log msg', foo_path)

Modified: subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/dirent_uri-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/dirent_uri-test.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/dirent_uri-test.c (original)
+++ subversion/branches/remove-log-addressing/subversion/tests/libsvn_subr/dirent_uri-test.c Wed Jun 25 18:16:50 2014
@@ -1108,6 +1108,7 @@ test_relpath_is_canonical(apr_pool_t *po
   static const testcase_is_canonical_t tests[] = {
     { "",                      TRUE },
     { ".",                     FALSE },
+    { "..",                    TRUE },
     { "/",                     FALSE },
     { "/.",                    FALSE },
     { "./",                    FALSE },

Modified: subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/remove-log-addressing/tools/dev/unix-build/Makefile.svn Wed Jun 25 18:16:50 2014
@@ -74,7 +74,7 @@ GNU_ICONV_VER	= 1.14
 APR_UTIL_VER	= 1.5.3
 HTTPD_VER	= 2.2.27
 NEON_VER	= 0.29.6
-SERF_VER	= 1.3.4
+SERF_VER	= 1.3.6
 SERF_OLD_VER	= 0.3.1
 CYRUS_SASL_VER	= 2.1.25
 SQLITE_VER	= 3080403

Modified: subversion/branches/remove-log-addressing/tools/server-side/svn-rep-sharing-stats.c
URL: http://svn.apache.org/viewvc/subversion/branches/remove-log-addressing/tools/server-side/svn-rep-sharing-stats.c?rev=1605535&r1=1605534&r2=1605535&view=diff
==============================================================================
--- subversion/branches/remove-log-addressing/tools/server-side/svn-rep-sharing-stats.c (original)
+++ subversion/branches/remove-log-addressing/tools/server-side/svn-rep-sharing-stats.c Wed Jun 25 18:16:50 2014
@@ -304,7 +304,8 @@ process_one_revision(svn_fs_t *fs,
       the_id = node_rev_id2;
 
       /* Get the node_rev using the chosen node_rev_id. */
-      SVN_ERR(svn_fs_fs__get_node_revision(&node_rev, fs, the_id, scratch_pool));
+      SVN_ERR(svn_fs_fs__get_node_revision(&node_rev, fs, the_id,
+                                           scratch_pool, scratch_pool));
 
       /* Maybe record the sha1's. */
       SVN_ERR(record(prop_reps, node_rev->prop_rep, result_pool));