You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/11/02 17:45:33 UTC

svn commit: r1712080 [2/2] - in /subversion/branches/move-tracking-2: ./ notes/api-errata/1.9/ subversion/ subversion/include/ subversion/libsvn_client/ subversion/libsvn_fs/ subversion/libsvn_fs_fs/ subversion/libsvn_fs_x/ subversion/libsvn_ra_serf/ s...

Modified: subversion/branches/move-tracking-2/subversion/libsvn_repos/reporter.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_repos/reporter.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_repos/reporter.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_repos/reporter.c Mon Nov  2 16:45:32 2015
@@ -578,8 +578,8 @@ delta_proplists(report_baton_t *b, svn_r
       SVN_ERR(get_source_root(b, &s_root, s_rev));
 
       /* Is this deltification worth our time? */
-      SVN_ERR(svn_fs_props_changed(&changed, b->t_root, t_path, s_root,
-                                   s_path, pool));
+      SVN_ERR(svn_fs_props_different(&changed, b->t_root, t_path, s_root,
+                                     s_path, pool));
       if (! changed)
         return SVN_NO_ERROR;
 

Modified: subversion/branches/move-tracking-2/subversion/libsvn_repos/repos.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_repos/repos.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_repos/repos.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_repos/repos.c Mon Nov  2 16:45:32 2015
@@ -1175,8 +1175,8 @@ svn_repos_create(svn_repos_t **repos_p,
   SVN_ERR(lock_repos(repos, FALSE, FALSE, scratch_pool));
 
   /* Create an environment for the filesystem. */
-  if ((err = svn_fs_create(&repos->fs, repos->db_path, fs_config,
-                           result_pool)))
+  if ((err = svn_fs_create2(&repos->fs, repos->db_path, fs_config,
+                            result_pool, scratch_pool)))
     {
       /* If there was an error making the filesytem, e.g. unknown/supported
        * filesystem type.  Clean up after ourselves.  Yes this is safe because

Modified: subversion/branches/move-tracking-2/subversion/libsvn_repos/rev_hunt.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_repos/rev_hunt.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_repos/rev_hunt.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_repos/rev_hunt.c Mon Nov  2 16:45:32 2015
@@ -1356,6 +1356,7 @@ send_path_revision(struct path_revision
   void *delta_baton = NULL;
   apr_pool_t *tmp_pool;  /* For swapping */
   svn_boolean_t contents_changed;
+  svn_boolean_t props_changed;
 
   svn_pool_clear(sb->iterpool);
 
@@ -1368,23 +1369,61 @@ send_path_revision(struct path_revision
   SVN_ERR(svn_fs_revision_root(&root, repos->fs, path_rev->revnum,
                                sb->iterpool));
 
-  /* Get the file's properties for this revision and compute the diffs. */
-  SVN_ERR(svn_fs_node_proplist(&props, root, path_rev->path,
+  /* Check if the props *may* have changed. */
+  if (sb->last_root)
+    {
+      /* We don't use svn_fs_props_different() because it's more
+       * expensive. */
+      SVN_ERR(svn_fs_props_changed(&props_changed,
+                                   sb->last_root, sb->last_path,
+                                   root, path_rev->path, sb->iterpool));
+    }
+  else
+    {
+      props_changed = TRUE;
+    }
+
+  /* Calculate actual difference between last and current properties. */
+  if (props_changed)
+    {
+      /* Get the file's properties for this revision and compute the diffs. */
+      SVN_ERR(svn_fs_node_proplist(&props, root, path_rev->path,
                                    sb->iterpool));
-  SVN_ERR(svn_prop_diffs(&prop_diffs, props, sb->last_props,
-                         sb->iterpool));
+      SVN_ERR(svn_prop_diffs(&prop_diffs, props, sb->last_props,
+                             sb->iterpool));
+    }
+  else
+    {
+      /* Properties didn't change: copy  LAST_PROPS to current POOL. */
+      props = svn_prop_hash_dup(sb->last_props, sb->iterpool);
+      prop_diffs = apr_array_make(sb->iterpool, 0, sizeof(svn_prop_t));
+    }
 
-  /* Check if the contents changed. */
+  /* Check if the contents *may* have changed. */
   if (! sb->last_root)
     {
       /* Special case: In the first revision, we always provide a delta. */
       contents_changed = TRUE;
     }
+  else if (sb->include_merged_revisions
+           && strcmp(sb->last_path, path_rev->path))
+    {
+      /* ### This is a HACK!!!
+       * Blame -g, in older clients anyways, relies on getting a notification
+       * whenever the path changes - even if there was no content change.
+       *
+       * TODO: A future release should take an extra parameter and depending
+       * on that either always send a text delta or only send it if there
+       * is a difference. */
+      contents_changed = TRUE;
+    }
   else
     {
-      SVN_ERR(svn_fs_contents_changed(&contents_changed, sb->last_root,
-                                      sb->last_path, root, path_rev->path,
-                                      sb->iterpool));
+      /* Did the file contents actually change?
+       * It could e.g. be a property-only change. */
+      SVN_ERR(svn_fs_contents_different(&contents_changed, sb->last_root,
+                                        sb->last_path, root, path_rev->path,
+                                        sb->iterpool));
     }
 
   /* We have all we need, give to the handler. */

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/base64.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/base64.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/base64.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/base64.c Mon Nov  2 16:45:32 2015
@@ -58,6 +58,7 @@ struct encode_baton {
   unsigned char buf[3];         /* Bytes waiting to be encoded */
   size_t buflen;                /* Number of bytes waiting */
   size_t linelen;               /* Bytes output so far on this line */
+  svn_boolean_t break_lines;
   apr_pool_t *scratch_pool;
 };
 
@@ -214,7 +215,8 @@ encode_data(void *baton, const char *dat
   svn_error_t *err = SVN_NO_ERROR;
 
   /* Encode this block of data and write it out.  */
-  encode_bytes(encoded, data, *len, eb->buf, &eb->buflen, &eb->linelen, TRUE);
+  encode_bytes(encoded, data, *len, eb->buf, &eb->buflen, &eb->linelen,
+               eb->break_lines);
   enclen = encoded->len;
   if (enclen != 0)
     err = svn_stream_write(eb->output, encoded->data, &enclen);
@@ -233,7 +235,8 @@ finish_encoding_data(void *baton)
   svn_error_t *err = SVN_NO_ERROR;
 
   /* Encode a partial group at the end if necessary, and write it out.  */
-  encode_partial_group(encoded, eb->buf, eb->buflen, eb->linelen, TRUE);
+  encode_partial_group(encoded, eb->buf, eb->buflen, eb->linelen,
+                       eb->break_lines);
   enclen = encoded->len;
   if (enclen != 0)
     err = svn_stream_write(eb->output, encoded->data, &enclen);
@@ -247,7 +250,9 @@ finish_encoding_data(void *baton)
 
 
 svn_stream_t *
-svn_base64_encode(svn_stream_t *output, apr_pool_t *pool)
+svn_base64_encode2(svn_stream_t *output,
+                   svn_boolean_t break_lines,
+                   apr_pool_t *pool)
 {
   struct encode_baton *eb = apr_palloc(pool, sizeof(*eb));
   svn_stream_t *stream;
@@ -255,6 +260,7 @@ svn_base64_encode(svn_stream_t *output,
   eb->output = output;
   eb->buflen = 0;
   eb->linelen = 0;
+  eb->break_lines = break_lines;
   eb->scratch_pool = svn_pool_create(pool);
   stream = svn_stream_create(eb, pool);
   svn_stream_set_write(stream, encode_data);

Modified: subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c (original)
+++ subversion/branches/move-tracking-2/subversion/libsvn_subr/deprecated.c Mon Nov  2 16:45:32 2015
@@ -46,6 +46,7 @@
 #include "svn_utf.h"
 #include "svn_xml.h"
 #include "svn_auth.h"
+#include "svn_base64.h"
 
 #include "opt.h"
 #include "auth.h"
@@ -1574,3 +1575,10 @@ svn_cmdline_create_auth_baton(svn_auth_b
                                                         cancel_baton,
                                                         pool));
 }
+
+/*** From base64.c ***/
+svn_stream_t *
+svn_base64_encode(svn_stream_t *output, apr_pool_t *pool)
+{
+  return svn_base64_encode2(output, TRUE, pool);
+}

Modified: subversion/branches/move-tracking-2/subversion/mod_dav_svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/mod_dav_svn/util.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/mod_dav_svn/util.c (original)
+++ subversion/branches/move-tracking-2/subversion/mod_dav_svn/util.c Mon Nov  2 16:45:32 2015
@@ -620,7 +620,7 @@ dav_svn__make_base64_output_stream(apr_b
   wb->output = output;
   svn_stream_set_write(stream, brigade_write_fn);
 
-  return svn_base64_encode(stream, pool);
+  return svn_base64_encode2(stream, TRUE, pool);
 }
 
 void

Modified: subversion/branches/move-tracking-2/subversion/svnbench/null-list-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnbench/null-list-cmd.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnbench/null-list-cmd.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnbench/null-list-cmd.c Mon Nov  2 16:45:32 2015
@@ -48,6 +48,12 @@ struct print_baton {
   svn_client_ctx_t *ctx;
 };
 
+/* Field flags required for this function */
+static const apr_uint32_t print_dirent_fields = SVN_DIRENT_KIND;
+static const apr_uint32_t print_dirent_fields_verbose = (
+    SVN_DIRENT_KIND  | SVN_DIRENT_SIZE | SVN_DIRENT_TIME |
+    SVN_DIRENT_CREATED_REV | SVN_DIRENT_LAST_AUTHOR);
+
 /* This implements the svn_client_list_func2_t API, printing a single
    directory entry in text format. */
 static svn_error_t *
@@ -100,9 +106,9 @@ svn_cl__null_list(apr_getopt_t *os,
   svn_opt_push_implicit_dot_target(targets, pool);
 
   if (opt_state->verbose)
-    dirent_fields = SVN_DIRENT_ALL;
+    dirent_fields = print_dirent_fields_verbose;
   else
-    dirent_fields = SVN_DIRENT_KIND; /* the only thing we actually need... */
+    dirent_fields = print_dirent_fields;
 
   pb.ctx = ctx;
   pb.verbose = opt_state->verbose;

Modified: subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnbench/svnbench.c Mon Nov  2 16:45:32 2015
@@ -42,6 +42,7 @@
 
 #include "private/svn_opt_private.h"
 #include "private/svn_cmdline_private.h"
+#include "private/svn_string_private.h"
 
 #include "svn_private_config.h"
 
@@ -337,6 +338,23 @@ signal_handler(int signum)
   cancelled = TRUE;
 }
 
+/* Baton for ra_progress_func() callback. */
+typedef struct ra_progress_baton_t
+{
+  apr_off_t bytes_transferred;
+} ra_progress_baton_t;
+
+/* Implements svn_ra_progress_notify_func_t. */
+static void
+ra_progress_func(apr_off_t progress,
+                 apr_off_t total,
+                 void *baton,
+                 apr_pool_t *pool)
+{
+  ra_progress_baton_t *b = baton;
+  b->bytes_transferred = progress;
+}
+
 /* Our cancellation callback. */
 svn_error_t *
 svn_cl__check_cancel(void *baton)
@@ -372,6 +390,7 @@ sub_main(int *exit_code, int argc, const
   svn_boolean_t descend = TRUE;
   svn_boolean_t use_notifier = TRUE;
   apr_time_t start_time, time_taken;
+  ra_progress_baton_t ra_progress_baton = {0};
 
   received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int));
 
@@ -939,6 +958,12 @@ sub_main(int *exit_code, int argc, const
   ctx->conflict_func2 = NULL;
   ctx->conflict_baton2 = NULL;
 
+  if (!opt_state.quiet)
+    {
+      ctx->progress_func = ra_progress_func;
+      ctx->progress_baton = &ra_progress_baton;
+    }
+
   /* And now we finally run the subcommand. */
   start_time = apr_time_now();
   err = (*subcommand->cmd_func)(os, &command_baton, pool);
@@ -979,6 +1004,15 @@ sub_main(int *exit_code, int argc, const
       SVN_ERR(svn_cmdline_printf(pool,
                                 _("%15.6f seconds taken\n"),
                                 time_taken / 1.0e6));
+
+      /* Report how many bytes transferred over network if RA layer provided
+         this information. */
+      if (ra_progress_baton.bytes_transferred > 0)
+        SVN_ERR(svn_cmdline_printf(pool,
+                                   _("%15s bytes transferred over network\n"),
+                                   svn__i64toa_sep(
+                                     ra_progress_baton.bytes_transferred, ',',
+                                     pool)));
     }
 
   return SVN_NO_ERROR;

Modified: subversion/branches/move-tracking-2/subversion/svnlook/svnlook.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/svnlook/svnlook.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/svnlook/svnlook.c (original)
+++ subversion/branches/move-tracking-2/subversion/svnlook/svnlook.c Mon Nov  2 16:45:32 2015
@@ -683,7 +683,8 @@ dump_contents(svn_stream_t *stream,
    non-textual data -- in this case, the *IS_BINARY flag is set and no
    temporary files are created.
 
-   Use POOL for all that allocation goodness. */
+   TMPFILE1 and TMPFILE2 will be removed when RESULT_POOL is destroyed.
+ */
 static svn_error_t *
 prepare_tmpfiles(const char **tmpfile1,
                  const char **tmpfile2,
@@ -692,8 +693,8 @@ prepare_tmpfiles(const char **tmpfile1,
                  const char *path1,
                  svn_fs_root_t *root2,
                  const char *path2,
-                 const char *tmpdir,
-                 apr_pool_t *pool)
+                 apr_pool_t *result_pool,
+                 apr_pool_t *scratch_pool)
 {
   svn_string_t *mimetype;
   svn_stream_t *stream;
@@ -710,7 +711,7 @@ prepare_tmpfiles(const char **tmpfile1,
   if (root1)
     {
       SVN_ERR(svn_fs_node_prop(&mimetype, root1, path1,
-                               SVN_PROP_MIME_TYPE, pool));
+                               SVN_PROP_MIME_TYPE, scratch_pool));
       if (mimetype && svn_mime_type_is_binary(mimetype->data))
         {
           *is_binary = TRUE;
@@ -720,7 +721,7 @@ prepare_tmpfiles(const char **tmpfile1,
   if (root2)
     {
       SVN_ERR(svn_fs_node_prop(&mimetype, root2, path2,
-                               SVN_PROP_MIME_TYPE, pool));
+                               SVN_PROP_MIME_TYPE, scratch_pool));
       if (mimetype && svn_mime_type_is_binary(mimetype->data))
         {
           *is_binary = TRUE;
@@ -730,17 +731,15 @@ prepare_tmpfiles(const char **tmpfile1,
 
   /* Now, prepare the two temporary files, each of which will either
      be empty, or will have real contents.  */
-  SVN_ERR(svn_stream_open_unique(&stream, tmpfile1,
-                                 tmpdir,
-                                 svn_io_file_del_none,
-                                 pool, pool));
-  SVN_ERR(dump_contents(stream, root1, path1, pool));
-
-  SVN_ERR(svn_stream_open_unique(&stream, tmpfile2,
-                                 tmpdir,
-                                 svn_io_file_del_none,
-                                 pool, pool));
-  SVN_ERR(dump_contents(stream, root2, path2, pool));
+  SVN_ERR(svn_stream_open_unique(&stream, tmpfile1, NULL,
+                                 svn_io_file_del_on_pool_cleanup,
+                                 result_pool, scratch_pool));
+  SVN_ERR(dump_contents(stream, root1, path1, scratch_pool));
+
+  SVN_ERR(svn_stream_open_unique(&stream, tmpfile2, NULL,
+                                 svn_io_file_del_on_pool_cleanup,
+                                 result_pool, scratch_pool));
+  SVN_ERR(dump_contents(stream, root2, path2, scratch_pool));
 
   return SVN_NO_ERROR;
 }
@@ -840,7 +839,6 @@ print_diff_tree(svn_stream_t *out_stream
                 const char *path /* UTF-8! */,
                 const char *base_path /* UTF-8! */,
                 const svnlook_ctxt_t *c,
-                const char *tmpdir,
                 apr_pool_t *pool)
 {
   const char *orig_path = NULL, *new_path = NULL;
@@ -849,7 +847,7 @@ print_diff_tree(svn_stream_t *out_stream
   svn_boolean_t is_copy = FALSE;
   svn_boolean_t binary = FALSE;
   svn_boolean_t diff_header_printed = FALSE;
-  apr_pool_t *subpool;
+  apr_pool_t *iterpool;
   svn_stringbuf_t *header;
 
   SVN_ERR(check_cancel(NULL));
@@ -910,7 +908,7 @@ print_diff_tree(svn_stream_t *out_stream
           do_diff = TRUE;
           SVN_ERR(prepare_tmpfiles(&orig_path, &new_path, &binary,
                                    base_root, base_path, root, path,
-                                   tmpdir, pool));
+                                   pool, pool));
         }
       else if (c->diff_copy_from && node->action == 'A' && is_copy)
         {
@@ -919,7 +917,7 @@ print_diff_tree(svn_stream_t *out_stream
               do_diff = TRUE;
               SVN_ERR(prepare_tmpfiles(&orig_path, &new_path, &binary,
                                        base_root, base_path, root, path,
-                                       tmpdir, pool));
+                                       pool, pool));
             }
         }
       else if (! c->no_diff_added && node->action == 'A')
@@ -928,14 +926,14 @@ print_diff_tree(svn_stream_t *out_stream
           orig_empty = TRUE;
           SVN_ERR(prepare_tmpfiles(&orig_path, &new_path, &binary,
                                    NULL, base_path, root, path,
-                                   tmpdir, pool));
+                                   pool, pool));
         }
       else if (! c->no_diff_deleted && node->action == 'D')
         {
           do_diff = TRUE;
           SVN_ERR(prepare_tmpfiles(&orig_path, &new_path, &binary,
                                    base_root, base_path, NULL, path,
-                                   tmpdir, pool));
+                                   pool, pool));
         }
 
       /* The header for the copy case has already been created, and we don't
@@ -1101,12 +1099,6 @@ print_diff_tree(svn_stream_t *out_stream
         }
     }
 
-  /* Make sure we delete any temporary files. */
-  if (orig_path)
-    SVN_ERR(svn_io_remove_file2(orig_path, FALSE, pool));
-  if (new_path)
-    SVN_ERR(svn_io_remove_file2(new_path, FALSE, pool));
-
   /*** Now handle property diffs ***/
   if ((node->prop_mod) && (node->action != 'D') && (! c->ignore_properties))
     {
@@ -1153,26 +1145,21 @@ print_diff_tree(svn_stream_t *out_stream
     }
 
   /* Return here if the node has no children. */
-  node = node->child;
-  if (! node)
+  if (! node->child)
     return SVN_NO_ERROR;
 
   /* Recursively handle the node's children. */
-  subpool = svn_pool_create(pool);
-  SVN_ERR(print_diff_tree(out_stream, encoding, root, base_root, node,
-                          svn_dirent_join(path, node->name, subpool),
-                          svn_dirent_join(base_path, node->name, subpool),
-                          c, tmpdir, subpool));
-  while (node->sibling)
+  iterpool = svn_pool_create(pool);
+  for (node = node->child; node; node = node->sibling)
     {
-      svn_pool_clear(subpool);
-      node = node->sibling;
+      svn_pool_clear(iterpool);
+
       SVN_ERR(print_diff_tree(out_stream, encoding, root, base_root, node,
-                              svn_dirent_join(path, node->name, subpool),
-                              svn_dirent_join(base_path, node->name, subpool),
-                              c, tmpdir, subpool));
+                              svn_dirent_join(path, node->name, iterpool),
+                              svn_dirent_join(base_path, node->name, iterpool),
+                              c, iterpool));
     }
-  svn_pool_destroy(subpool);
+  svn_pool_destroy(iterpool);
 
   return SVN_NO_ERROR;
 }
@@ -1535,12 +1522,10 @@ do_diff(svnlook_ctxt_t *c, apr_pool_t *p
   SVN_ERR(generate_delta_tree(&tree, c->repos, root, base_rev_id, pool));
   if (tree)
     {
-      const char *tmpdir;
       svn_stream_t *out_stream;
       const char *encoding = svn_cmdline_output_encoding(pool);
 
       SVN_ERR(svn_fs_revision_root(&base_root, c->fs, base_rev_id, pool));
-      SVN_ERR(svn_io_temp_dir(&tmpdir, pool));
 
       /* This fflush() might seem odd, but it was added to deal
          with this bug report:
@@ -1569,7 +1554,7 @@ do_diff(svnlook_ctxt_t *c, apr_pool_t *p
       SVN_ERR(svn_stream_for_stdout(&out_stream, pool));
 
       SVN_ERR(print_diff_tree(out_stream, encoding, root, base_root, tree,
-                              "", "", c, tmpdir, pool));
+                              "", "", c, pool));
     }
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py (original)
+++ subversion/branches/move-tracking-2/subversion/tests/cmdline/svnadmin_tests.py Mon Nov  2 16:45:32 2015
@@ -3236,11 +3236,60 @@ def dump_no_op_change(sbox):
   # Test svn log -v for r2:
   _, expected, _ = svntest.actions.run_and_verify_svn(None, [], 'log', '-v',
                                                       '-r2', sbox.repo_url)
+  found = [True for line in expected if line.find('M /bar\n') != -1]
+  if not found:
+    raise svntest.Failure
   svntest.actions.run_and_verify_svn(expected, [], 'log',  '-v',
                                      '-r2', sbox2.repo_url)
   # Test svn log -v for /bar:
   _, expected, _ = svntest.actions.run_and_verify_svn(None, [], 'log', '-v',
                                                       sbox.repo_url + '/bar')
+  found = [True for line in expected if line.find('M /bar\n') != -1]
+  if not found:
+    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(expected, [], 'log',  '-v',
+                                     sbox2.repo_url + '/bar')
+
+@XFail()
+def dump_no_op_prop_change(sbox):
+  "svnadmin dump with no-op property change"
+
+  sbox.build(create_wc=False, empty=True)
+  empty_file = sbox.get_tempname()
+  svntest.main.file_write(empty_file, '')
+
+  svntest.actions.run_and_verify_svnmucc(None, [],
+                                         '-U', sbox.repo_url,
+                                         '-m', svntest.main.make_log_msg(),
+                                         'put', empty_file, 'bar',
+                                         'propset', 'pname', 'pval', 'bar')
+  # Commit a no-op property change.
+  svntest.actions.run_and_verify_svnmucc(None, [],
+                                         '-U', sbox.repo_url,
+                                         '-m', svntest.main.make_log_msg(),
+                                         'propset', 'pname', 'pval', 'bar')
+  # Dump and load the repository.
+  _, dump, _ = svntest.actions.run_and_verify_svnadmin(None, [],
+                                                       'dump', '-q',
+                                                       sbox.repo_dir)
+  sbox2 = sbox.clone_dependent()
+  sbox2.build(create_wc=False, empty=True)
+  load_and_verify_dumpstream(sbox2, None, [], None, False, dump)
+
+  # Test svn log -v for r2:
+  _, expected, _ = svntest.actions.run_and_verify_svn(None, [], 'log', '-v',
+                                                      '-r2', sbox.repo_url)
+  found = [True for line in expected if line.find('M /bar\n') != -1]
+  if not found:
+    raise svntest.Failure
+  svntest.actions.run_and_verify_svn(expected, [], 'log',  '-v',
+                                     '-r2', sbox2.repo_url)
+  # Test svn log -v for /bar:
+  _, expected, _ = svntest.actions.run_and_verify_svn(None, [], 'log', '-v',
+                                                      sbox.repo_url + '/bar')
+  found = [True for line in expected if line.find('M /bar\n') != -1]
+  if not found:
+    raise svntest.Failure
   svntest.actions.run_and_verify_svn(expected, [], 'log',  '-v',
                                      sbox2.repo_url + '/bar')
 
@@ -3305,6 +3354,7 @@ test_list = [ None,
               load_revprops,
               dump_revprops,
               dump_no_op_change,
+              dump_no_op_prop_change
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/move-tracking-2/subversion/tests/libsvn_delta/svndiff-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/libsvn_delta/svndiff-test.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/libsvn_delta/svndiff-test.c (original)
+++ subversion/branches/move-tracking-2/subversion/tests/libsvn_delta/svndiff-test.c Mon Nov  2 16:45:32 2015
@@ -88,7 +88,7 @@ main(int argc, char **argv)
 #ifdef QUOPRINT_SVNDIFFS
   encoder = svn_quoprint_encode(stdout_stream, pool);
 #else
-  encoder = svn_base64_encode(stdout_stream, pool);
+  encoder = svn_base64_encode2(stdout_stream, TRUE, pool);
 #endif
   /* use maximum compression level */
   svn_txdelta_to_svndiff3(&svndiff_handler, &svndiff_baton,

Modified: subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/move-tracking-2/subversion/tests/libsvn_fs/fs-test.c Mon Nov  2 16:45:32 2015
@@ -5971,6 +5971,7 @@ compare_contents(const svn_test_opts_t *
   svn_revnum_t rev;
   int i;
   apr_pool_t *iterpool = svn_pool_create(pool);
+  svn_boolean_t changed;
 
   /* Two similar but different texts that yield the same MD5 digest. */
   const char *evil_text1
@@ -6153,6 +6154,21 @@ compare_contents(const svn_test_opts_t *
         }
     }
 
+  /* Check how svn_fs_contents_different() and svn_fs_contents_changed()
+     handles invalid path.*/
+  SVN_ERR(svn_fs_revision_root(&root1, fs, 1, iterpool));
+  SVN_TEST_ASSERT_ANY_ERROR(
+    svn_fs_contents_changed(&changed, root1, "/", root1, "/", iterpool));
+  SVN_TEST_ASSERT_ANY_ERROR(
+    svn_fs_contents_different(&changed, root1, "/", root1, "/", iterpool));
+
+  SVN_TEST_ASSERT_ANY_ERROR(
+    svn_fs_contents_changed(&changed, root1, "/non-existent", root1,
+                            "/non-existent", iterpool));
+  SVN_TEST_ASSERT_ANY_ERROR(
+    svn_fs_contents_different(&changed, root1, "/non-existent", root1,
+                              "/non-existent", iterpool));
+
   svn_pool_destroy(iterpool);
 
   return SVN_NO_ERROR;

Modified: subversion/branches/move-tracking-2/subversion/tests/libsvn_fs_x/fs-x-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/libsvn_fs_x/fs-x-pack-test.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/libsvn_fs_x/fs-x-pack-test.c (original)
+++ subversion/branches/move-tracking-2/subversion/tests/libsvn_fs_x/fs-x-pack-test.c Mon Nov  2 16:45:32 2015
@@ -888,7 +888,6 @@ test_batch_fsync(const svn_test_opts_t *
       apr_size_t len = strlen(path);
 
       SVN_ERR(svn_fs_x__batch_fsync_open_file(&file, batch, path, pool));
-      SVN_ERR(svn_fs_x__batch_fsync_new_path(batch, path, pool));
 
       SVN_ERR(svn_io_file_write(file, path, &len, pool));
     }
@@ -906,7 +905,6 @@ test_batch_fsync(const svn_test_opts_t *
       apr_size_t len = strlen(path);
 
       SVN_ERR(svn_fs_x__batch_fsync_open_file(&file, batch, path, pool));
-      SVN_ERR(svn_fs_x__batch_fsync_new_path(batch, path, pool));
 
       SVN_ERR(svn_io_file_write(file, path, &len, pool));
     }
@@ -923,7 +921,6 @@ test_batch_fsync(const svn_test_opts_t *
       apr_size_t len = strlen(path);
 
       SVN_ERR(svn_fs_x__batch_fsync_open_file(&file, batch, path, pool));
-      SVN_ERR(svn_fs_x__batch_fsync_new_path(batch, path, pool));
 
       SVN_ERR(svn_io_file_write(file, path, &len, pool));
     }

Modified: subversion/branches/move-tracking-2/subversion/tests/libsvn_subr/stream-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/libsvn_subr/stream-test.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/libsvn_subr/stream-test.c (original)
+++ subversion/branches/move-tracking-2/subversion/tests/libsvn_subr/stream-test.c Mon Nov  2 16:45:32 2015
@@ -550,9 +550,27 @@ test_stream_base64(apr_pool_t *pool)
     NULL
   };
 
+  /* Test svn_base64_encode2() with BREAK_LINES=FALSE. */
   stream = svn_stream_from_stringbuf(actual, pool);
   stream = svn_base64_decode(stream, pool);
-  stream = svn_base64_encode(stream, pool);
+  stream = svn_base64_encode2(stream, TRUE, pool);
+
+  for (i = 0; strings[i]; i++)
+    {
+      apr_size_t len = strlen(strings[i]);
+
+      svn_stringbuf_appendbytes(expected, strings[i], len);
+      SVN_ERR(svn_stream_write(stream, strings[i], &len));
+    }
+
+  SVN_ERR(svn_stream_close(stream));
+
+  SVN_TEST_STRING_ASSERT(actual->data, expected->data);
+
+  /* Test svn_base64_encode2() with BREAK_LINES=FALSE. */
+  stream = svn_stream_from_stringbuf(actual, pool);
+  stream = svn_base64_decode(stream, pool);
+  stream = svn_base64_encode2(stream, FALSE, pool);
 
   for (i = 0; strings[i]; i++)
     {
@@ -701,6 +719,32 @@ test_stream_base64_2(apr_pool_t *pool)
   };
   int i;
 
+  /* Test svn_base64_encode2() with BREAK_LINES=TRUE. */
+  for (i = 0; data[i].encoded1; i++)
+    {
+      apr_size_t len1 = strlen(data[i].encoded1);
+
+      svn_stringbuf_t *actual = svn_stringbuf_create_empty(pool);
+      svn_stringbuf_t *expected = svn_stringbuf_create_empty(pool);
+      svn_stream_t *stream = svn_stream_from_stringbuf(actual, pool);
+
+      stream = svn_base64_encode2(stream, TRUE, pool);
+      stream = svn_base64_decode(stream, pool);
+
+      SVN_ERR(svn_stream_write(stream, data[i].encoded1, &len1));
+      svn_stringbuf_appendbytes(expected, data[i].encoded1, len1);
+
+      if (data[i].encoded2)
+        {
+          apr_size_t len2 = strlen(data[i].encoded2);
+          SVN_ERR(svn_stream_write(stream, data[i].encoded2, &len2));
+          svn_stringbuf_appendbytes(expected, data[i].encoded2, len2);
+        }
+
+      SVN_ERR(svn_stream_close(stream));
+    }
+
+  /* Test svn_base64_encode2() with BREAK_LINES=FALSE. */
   for (i = 0; data[i].encoded1; i++)
     {
       apr_size_t len1 = strlen(data[i].encoded1);
@@ -709,7 +753,7 @@ test_stream_base64_2(apr_pool_t *pool)
       svn_stringbuf_t *expected = svn_stringbuf_create_empty(pool);
       svn_stream_t *stream = svn_stream_from_stringbuf(actual, pool);
 
-      stream = svn_base64_encode(stream, pool);
+      stream = svn_base64_encode2(stream, FALSE, pool);
       stream = svn_base64_decode(stream, pool);
 
       SVN_ERR(svn_stream_write(stream, data[i].encoded1, &len1));

Modified: subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c (original)
+++ subversion/branches/move-tracking-2/subversion/tests/svn_test_fs.c Mon Nov  2 16:45:32 2015
@@ -119,7 +119,7 @@ create_fs(svn_fs_t **fs_p,
      runs.  */
   SVN_ERR(svn_io_remove_dir2(name, TRUE, NULL, NULL, pool));
 
-  SVN_ERR(svn_fs_create(fs_p, name, fs_config, pool));
+  SVN_ERR(svn_fs_create2(fs_p, name, fs_config, pool, pool));
   if (! *fs_p)
     return svn_error_create(SVN_ERR_FS_GENERAL, NULL,
                             "Couldn't alloc a new fs object.");

Modified: subversion/branches/move-tracking-2/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/win-tests.py?rev=1712080&r1=1712079&r2=1712080&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/win-tests.py (original)
+++ subversion/branches/move-tracking-2/win-tests.py Mon Nov  2 16:45:32 2015
@@ -84,6 +84,8 @@ def _usage_exit():
   print("  --disable-http-v2      : Do not advertise support for HTTPv2 on server")
   print("  --disable-bulk-updates : Disable bulk updates on HTTP server")
   print("  --ssl-cert             : Path to SSL server certificate to trust.")
+  print("  --https                : Run Apache httpd with an https setup.")
+  print("  --http2                : Enable http2 in Apache Httpd (>= 2.4.17).")
   print("  --exclusive-wc-locks   : Enable exclusive working copy locks")
   print("  --memcached-dir=DIR    : Run memcached from dir")
   print("  --memcached-server=    : Enable usage of the specified memcached server")
@@ -134,7 +136,7 @@ opts, args = my_getopt(sys.argv[1:], 'hr
                         'httpd-server', 'http-short-circuit', 'httpd-no-log',
                         'disable-http-v2', 'disable-bulk-updates', 'help',
                         'fsfs-packing', 'fsfs-sharding=', 'javahl', 'swig=',
-                        'list', 'enable-sasl', 'bin=', 'parallel',
+                        'list', 'enable-sasl', 'bin=', 'parallel', 'http2',
                         'config-file=', 'server-minor-version=', 'log-level=',
                         'log-to-stdout', 'mode-filter=', 'milestone-filter=',
                         'ssl-cert=', 'exclusive-wc-locks', 'memcached-server=',
@@ -156,6 +158,7 @@ httpd_port = None
 httpd_service = None
 httpd_no_log = None
 use_ssl = False
+use_http2 = False
 http_short_circuit = False
 advertise_httpv2 = True
 http_bulk_updates = True
@@ -218,6 +221,8 @@ for opt, val in opts:
     httpd_no_log = 1
   elif opt == '--https':
     use_ssl = 1
+  elif opt == '--http2':
+    use_http2 = 1
   elif opt == '--http-short-circuit':
     http_short_circuit = True
   elif opt == '--disable-http-v2':
@@ -459,8 +464,8 @@ class Svnserve:
 class Httpd:
   "Run httpd for DAV tests"
   def __init__(self, abs_httpd_dir, abs_objdir, abs_builddir, abs_srcdir,
-               httpd_port, service, use_ssl, no_log, httpv2, short_circuit,
-               bulk_updates):
+               httpd_port, service, use_ssl, use_http2, no_log, httpv2,
+               short_circuit, bulk_updates):
     self.name = 'apache.exe'
     self.httpd_port = httpd_port
     self.httpd_dir = abs_httpd_dir
@@ -559,6 +564,8 @@ class Httpd:
     # Write LoadModule for minimal system module
     if use_ssl:
       fp.write(self._sys_module('ssl_module', 'mod_ssl.so'))
+    if use_http2:
+      fp.write(self._sys_module('http2_module', 'mod_http2.so'))
     fp.write(self._sys_module('dav_module', 'mod_dav.so'))
     if self.httpd_ver >= 2.3:
       fp.write(self._sys_module('access_compat_module', 'mod_access_compat.so'))
@@ -585,9 +592,16 @@ class Httpd:
 
     if use_ssl:
       fp.write('SSLEngine on\n')
+      fp.write('SSLProtocol All -SSLv2 -SSLv3\n')
       fp.write('SSLCertificateFile %s\n' % self._quote(self.certfile))
       fp.write('SSLCertificateKeyFile %s\n' % self._quote(self.certkeyfile))
 
+    if use_ssl and use_http2:
+      fp.write('Protocols h2 http/1.1\n')
+    elif use_http2:
+      fp.write('Protocols h2c http/1.1\n')
+      fp.write('H2Direct on\n')
+
     # Don't handle .htaccess, symlinks, etc.
     fp.write('<Directory />\n')
     fp.write('AllowOverride None\n')
@@ -996,7 +1010,7 @@ if not list_tests:
 
   if run_httpd:
     daemon = Httpd(abs_httpd_dir, abs_objdir, abs_builddir, abs_srcdir,
-                   httpd_port, httpd_service, use_ssl,
+                   httpd_port, httpd_service, use_ssl, use_http2,
                    httpd_no_log, advertise_httpv2, http_short_circuit,
                    http_bulk_updates)
 

Propchange: subversion/branches/move-tracking-2/win-tests.py
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Nov  2 16:45:32 2015
@@ -86,4 +86,4 @@
 /subversion/branches/verify-at-commit/win-tests.py:1462039-1462408
 /subversion/branches/verify-keep-going/win-tests.py:1439280-1546110
 /subversion/branches/wc-collate-path/win-tests.py:1402685-1480384
-/subversion/trunk/win-tests.py:1606692-1710529
+/subversion/trunk/win-tests.py:1606692-1712079