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/09/21 17:27:08 UTC

svn commit: r1704320 [4/4] - in /subversion/branches/move-tracking-2: ./ build/ build/generator/ build/generator/templates/ subversion/ subversion/bindings/javahl/native/jniwrapper/ subversion/include/ subversion/include/private/ subversion/libsvn_clie...

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=1704320&r1=1704319&r2=1704320&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 Sep 21 15:26:27 2015
@@ -32,74 +32,6 @@
 
 #include "../svn_test.h"
 
-struct stream_baton_t
-{
-  svn_filesize_t capacity_left;
-  char current;
-  apr_size_t max_read;
-};
-
-/* Implements svn_stream_t.read_fn. */
-static svn_error_t *
-read_handler(void *baton,
-             char *buffer,
-             apr_size_t *len)
-{
-  struct stream_baton_t *btn = baton;
-  int i;
-
-  /* Cap the read request to what we actually support. */
-  if (btn->max_read < *len)
-    *len = btn->max_read;
-  if (btn->capacity_left < *len)
-    *len = (apr_size_t)btn->capacity_left;
-
-  /* Produce output */
-  for (i = 0; i < *len; ++i)
-    {
-      buffer[i] = btn->current + 1;
-      btn->current = (btn->current + 1) & 0x3f;
-
-      btn->capacity_left--;
-    }
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-data_available_handler(void *baton,
-                       svn_boolean_t *data_available)
-{
-  struct stream_baton_t *btn = baton;
-  *data_available = btn->capacity_left > 0;
-
-  return SVN_NO_ERROR;
-}
-
-/* Return a stream that produces CAPACITY characters in chunks of at most
- * MAX_READ chars.  The first char will be '\1' followed by '\2' etc. up
- * to '\x40' and then repeating the cycle until the end of the stream.
- * Allocate the result in RESULT_POOL. */
-static svn_stream_t *
-create_test_read_stream(svn_filesize_t capacity,
-                        apr_size_t max_read,
-                        apr_pool_t *result_pool)
-{
-  svn_stream_t *stream;
-  struct stream_baton_t *baton;
-
-  baton = apr_pcalloc(result_pool, sizeof(*baton));
-  baton->capacity_left = capacity;
-  baton->current = 0;
-  baton->max_read = max_read;
-
-  stream = svn_stream_create(baton, result_pool);
-  svn_stream_set_read2(stream, read_handler, NULL);
-  svn_stream_set_data_available(stream, data_available_handler);
-
-  return stream;
-}
-
 /*------------------------ Tests --------------------------- */
 
 static svn_error_t *
@@ -872,70 +804,6 @@ test_stream_compressed_read_full(apr_poo
   return SVN_NO_ERROR;
 }
 
-/* Utility function verifying that LINE contains LENGTH characters read
- * from a stream returned by create_test_read_stream().  C is the first
- * character expected in LINE. */
-static svn_error_t *
-expect_line_content(svn_stringbuf_t *line,
-                    char start,
-                    apr_size_t length)
-{
-  apr_size_t i;
-  char c = start - 1;
-
-  SVN_TEST_ASSERT(line->len == length);
-  for (i = 0; i < length; ++i)
-    {
-      SVN_TEST_ASSERT(line->data[i] == c + 1);
-      c = (c + 1) & 0x3f;
-    }
-
-  return SVN_NO_ERROR;
-}
-
-static svn_error_t *
-test_stream_buffered_wrapper(apr_pool_t *pool)
-{
-  apr_pool_t *iterpool = svn_pool_create(pool);
-  svn_stringbuf_t *line;
-  svn_boolean_t eof = FALSE;
-  apr_size_t read = 0;
-
-  /* At least a few stream chunks (16k) worth of data. */
-  const apr_size_t stream_length = 100000;
-
-  /* Our source stream delivers data in very small chunks only.
-   * This requires multiple reads per line while readline will hold marks
-   * etc. */
-  svn_stream_t *stream = create_test_read_stream(stream_length, 19, pool);
-  stream = svn_stream_wrap_buffered_read(stream, pool);
-
-  /* We told the stream not to supports seeking to the start. */
-  SVN_TEST_ASSERT_ERROR(svn_stream_seek(stream, NULL),
-                        SVN_ERR_STREAM_SEEK_NOT_SUPPORTED);
-
-  /* Read all lines. Check EOF detection. */
-  while (!eof)
-    {
-      /* The local pool ensures that marks get cleaned up. */
-      svn_pool_clear(iterpool);
-      SVN_ERR(svn_stream_readline(stream, &line, "\n", &eof, iterpool));
-
-      /* Verify that we read the correct data and the full stream. */
-      if (read == 0)
-        SVN_ERR(expect_line_content(line, 1, '\n' - 1));
-      else if (eof)
-        SVN_ERR(expect_line_content(line, '\n' + 1, stream_length - read));
-      else
-        SVN_ERR(expect_line_content(line, '\n' + 1, 63));
-
-      /* Update bytes read. */
-      read += line->len + 1;
-    }
-
-  return SVN_NO_ERROR;
-}
-
 /* The test table.  */
 
 static int max_threads = 1;
@@ -967,8 +835,6 @@ static struct svn_test_descriptor_t test
                    "test svn_stringbuf_from_stream"),
     SVN_TEST_PASS2(test_stream_compressed_read_full,
                    "test compression for streams without partial read"),
-    SVN_TEST_PASS2(test_stream_buffered_wrapper,
-                   "test buffering read stream wrapper"),
     SVN_TEST_NULL
   };
 

Propchange: subversion/branches/move-tracking-2/tools/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Sep 21 15:26:27 2015
@@ -82,4 +82,4 @@
 /subversion/branches/verify-at-commit/tools:1462039-1462408
 /subversion/branches/verify-keep-going/tools:1439280-1546110
 /subversion/branches/wc-collate-path/tools:1402685-1480384
-/subversion/trunk/tools:1606692-1702602
+/subversion/trunk/tools:1606692-1704317

Modified: subversion/branches/move-tracking-2/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh (original)
+++ subversion/branches/move-tracking-2/tools/buildbot/slaves/bb-openbsd/svncheck-bindings.sh Mon Sep 21 15:26:27 2015
@@ -25,7 +25,7 @@ set -x
 branch="$(basename $(svn info . | grep ^URL  | cut -d' ' -f2))"
 export MALLOC_OPTIONS=S
 (cd .. && gmake BRANCH="$branch" THREADING="no" ENABLE_PERL_BINDINGS="no" svn-check-bindings)
-grep -q "^Result: PASS$" tests.log.bindings.pl || exit 1
+#grep -q "^Result: PASS$" tests.log.bindings.pl || exit 1
 grep -q "^OK$" tests.log.bindings.py || exit 1
 tail -n 1 tests.log.bindings.rb | grep -q ", 0 failures, 0 errors" || exit 1
 #TODO javahl

Modified: subversion/branches/move-tracking-2/tools/client-side/bash_completion
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/client-side/bash_completion?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/client-side/bash_completion (original)
+++ subversion/branches/move-tracking-2/tools/client-side/bash_completion Mon Sep 21 15:26:27 2015
@@ -1152,6 +1152,9 @@ _svnadmin ()
 		         --use-pre-commit-hook --use-post-commit-hook \
 		         --bypass-prop-validation -M --memory-cache-size"
 		;;
+	lstxns)
+        	cmdOpts="-r --revision"
+		;;
 	lock|unlock)
 		cmdOpts="--bypass-hooks"
 		;;

Modified: subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/analyze-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/analyze-cmd.c?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/analyze-cmd.c (original)
+++ subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/analyze-cmd.c Mon Sep 21 15:26:27 2015
@@ -40,14 +40,16 @@ svn_min__analyze(apr_getopt_t *os,
 {
   svn_min__cmd_baton_t *cmd_baton = baton;
 
-  /* If no option is given, default to "remove redundant sub-node m/i". */
+  /* If no option is given, default to "remove all you can". */
   if (   !cmd_baton->opt_state->remove_redundants
       && !cmd_baton->opt_state->remove_obsoletes
-      && !cmd_baton->opt_state->combine_ranges)
+      && !cmd_baton->opt_state->combine_ranges
+      && !cmd_baton->opt_state->remove_redundant_misaligned)
     {
       cmd_baton->opt_state->remove_redundants = TRUE;
       cmd_baton->opt_state->remove_obsoletes = TRUE;
       cmd_baton->opt_state->combine_ranges = TRUE;
+      cmd_baton->opt_state->remove_redundant_misaligned = TRUE;
     }
 
   cmd_baton->opt_state->run_analysis = TRUE;

Modified: subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/logic.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/logic.c?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/logic.c (original)
+++ subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/logic.c Mon Sep 21 15:26:27 2015
@@ -752,6 +752,161 @@ remove_overlapping_history(svn_rangelist
   return SVN_NO_ERROR;
 }
 
+/* Show the results of an attempt at "misaligned branch elision".
+ * SOURCE_BRANCH was to be elided because TARGET_BRANCH would cover it all.
+ * There were MISSING revisions exclusively in SOURCE_BRANCH.  OPT_STATE
+ * filters the output and SCRATCH_POOL is used for temporary allocations.
+ */
+static svn_error_t *
+show_misaligned_branch_elision(const char *source_branch,
+                               const char *target_branch,
+                               svn_rangelist_t *missing,
+                               svn_min__opt_state_t *opt_state,
+                               apr_pool_t *scratch_pool)
+{
+  if (opt_state->verbose || opt_state->run_analysis)
+    {
+      if (missing->nelts)
+        {
+          SVN_ERR(svn_cmdline_printf(scratch_pool,
+                        _("    CANNOT elide MISALIGNED branch %s\n"
+                          "        to likely correctly aligned branch %s\n"),
+                                     source_branch, target_branch));
+          SVN_ERR(print_ranges(missing,
+                        _("revisions not merged from likely correctly"
+                          " aligned branch: "),
+                               scratch_pool));
+        }
+      else
+        {
+          SVN_ERR(svn_cmdline_printf(scratch_pool,
+                        _("    elide misaligned branch %s\n"
+                          "        to likely correctly aligned branch %s\n"),
+                                     source_branch, target_branch));
+        }
+    }
+
+  return SVN_NO_ERROR;
+}
+
+/* Search MERGEINFO for branches that are sub-branches of one another.
+ * If exactly one of them shares the base with the FS_PATH to which the m/i
+ * is attached, than this is likely the properly aligned branch while the
+ * others are misaligned.
+ *
+ * Using LOG, determine those misaligned branches whose operative merged
+ * revisions are already covered by the merged revisions of the likely
+ * correctly aligned branch.  In that case, remove those misaligned branch
+ * entries from MERGEINFO.
+ *
+ * OPT_STATE filters the output and SCRATCH_POOL is used for temporaries.
+ */
+static svn_error_t *
+remove_redundant_misaligned_branches(svn_min__log_t *log,
+                                     const char *fs_path,
+                                     svn_mergeinfo_t mergeinfo,
+                                     svn_min__opt_state_t *opt_state,
+                                     apr_pool_t *scratch_pool)
+{
+  apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+  int i, k;
+  const char *base_name = svn_dirent_basename(fs_path, scratch_pool);
+  apr_array_header_t *sorted_mi;
+
+  sorted_mi = svn_sort__hash(mergeinfo,
+                             svn_sort_compare_items_lexically,
+                             scratch_pool);
+
+  for (i = 0; i < sorted_mi->nelts - 1; i = k)
+    {
+      const char *item_path, *sub_item_path;
+      int maybe_aligned_index = -1;
+      int maybe_aligned_found = 0;
+      int sub_branch_count = 0;
+
+      svn_pool_clear(iterpool);
+
+      /* Find the range of branches that are sub-branches of the one at I. */
+      item_path = APR_ARRAY_IDX(sorted_mi, i, svn_sort__item_t).key;
+      if (!strcmp(base_name, svn_dirent_basename(item_path, iterpool)))
+        {
+          maybe_aligned_index = i;
+          maybe_aligned_found = 1;
+        }
+
+      for (k = i + 1; k < sorted_mi->nelts; ++k)
+        {
+          sub_item_path = APR_ARRAY_IDX(sorted_mi, k, svn_sort__item_t).key;
+          if (!svn_dirent_is_ancestor(item_path, sub_item_path))
+            break;
+
+          if (!strcmp(base_name,
+                      svn_dirent_basename(sub_item_path, iterpool)))
+            {
+              maybe_aligned_index = k;
+              maybe_aligned_found++;
+            }
+        }
+
+      /* Found any?  If so, did we identify exactly one of them as likely
+       * being properly aligned? */
+      sub_branch_count = k - i - 1;
+      if ((maybe_aligned_found != 1) || (sub_branch_count == 0))
+        continue;
+
+      /* Try to elide all misaligned branches individually. */
+      for (k = i; k < i + sub_branch_count + 1; ++k)
+        {
+          svn_sort__item_t *source_item, *target_item;
+          svn_rangelist_t *missing, *dummy;
+
+          /* Is this one of the misaligned branches? */
+          if (k == maybe_aligned_index)
+            continue;
+
+          source_item = &APR_ARRAY_IDX(sorted_mi, k, svn_sort__item_t);
+          target_item = &APR_ARRAY_IDX(sorted_mi, maybe_aligned_index,
+                                       svn_sort__item_t);
+
+          /* Elide into sub-branch or parent branch (can't be equal here).
+           * Because we only know these are within the I tree, source and
+           * target may be siblings.  Check that they actually have an
+           * ancestor relationship.
+           */
+          if (k < maybe_aligned_index)
+            {
+              if (!svn_dirent_is_ancestor(source_item->key, target_item->key))
+                continue;
+            }
+          else
+            {
+              if (!svn_dirent_is_ancestor(target_item->key, source_item->key))
+                continue;
+            }
+
+          /* Determine which revisions are MISSING in target. */
+          SVN_ERR(svn_rangelist_diff(&missing, &dummy,
+                                     source_item->value, target_item->value,
+                                     TRUE, iterpool));
+          missing = svn_min__operative(log, source_item->key, missing,
+                                       iterpool);
+
+          /* Show the result and elide the branch if we can. */
+          SVN_ERR(show_misaligned_branch_elision(source_item->key,
+                                                 target_item->key,
+                                                 missing,
+                                                 opt_state,
+                                                 iterpool));
+          if (!missing->nelts)
+            svn_hash_sets(mergeinfo, source_item->key, NULL);
+        }
+    }
+
+  svn_pool_destroy(iterpool);
+
+  return SVN_NO_ERROR;
+}
+
 /* Try to elide as many lines from SUBTREE_MERGEINFO for node at FS_PATH as
  * possible using LOG and LOOKUP.  OPT_STATE determines if we may remove
  * deleted branches.  Elision happens by comparing the node's mergeinfo
@@ -824,8 +979,8 @@ remove_lines(svn_min__log_t *log,
           continue;
         }
 
-      /* We don't know how to handle reverse ranges (there should be none).
-         So, we must check for them - just to be sure. */
+      /* We don't know how to handle non-recursive ranges (they are legal,
+       * though).  So, we must check for them - just to be sure. */
       non_recursive_ranges = find_non_recursive_ranges(subtree_ranges,
                                                        iterpool);
       if (non_recursive_ranges->nelts)
@@ -1274,7 +1429,15 @@ normalize(apr_array_header_t *wc_mergein
       SVN_ERR(show_elision_header(parent_path, relpath, opt_state,
                                   scratch_pool));
 
-      /* Modify the mergeinfo here. */
+      /* Get rid of some of the easier cases of misaligned branches.
+       * Directly modify the orignal mergeinfo. */
+      if (opt_state->remove_redundant_misaligned)
+        SVN_ERR(remove_redundant_misaligned_branches(log, fs_path,
+                                                     subtree_mergeinfo,
+                                                     opt_state, iterpool));
+
+      /* Modify this copy of the mergeinfo.
+       * If we can elide it all, drop the original. */
       subtree_mergeinfo_copy = svn_mergeinfo_dup(subtree_mergeinfo,
                                                  iterpool);
 

Modified: subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h (original)
+++ subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h Mon Sep 21 15:26:27 2015
@@ -67,6 +67,7 @@ typedef struct svn_min__opt_state_t
   svn_boolean_t remove_obsoletes;
   svn_boolean_t combine_ranges;
   svn_boolean_t remove_redundants;
+  svn_boolean_t remove_redundant_misaligned;
   svn_boolean_t run_analysis;
 
   /* trust server SSL certs that would otherwise be rejected as "untrusted" */

Modified: subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/normalize-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/normalize-cmd.c?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/normalize-cmd.c (original)
+++ subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/normalize-cmd.c Mon Sep 21 15:26:27 2015
@@ -43,7 +43,8 @@ svn_min__normalize(apr_getopt_t *os,
   /* If no option is given, default to "remove redundant sub-node m/i". */
   if (   !cmd_baton->opt_state->remove_redundants
       && !cmd_baton->opt_state->remove_obsoletes
-      && !cmd_baton->opt_state->combine_ranges)
+      && !cmd_baton->opt_state->combine_ranges
+      && !cmd_baton->opt_state->remove_redundant_misaligned)
     cmd_baton->opt_state->remove_redundants = TRUE;
 
   SVN_ERR(svn_min__run_normalize(baton, pool));

Modified: subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c (original)
+++ subversion/branches/move-tracking-2/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c Mon Sep 21 15:26:27 2015
@@ -88,6 +88,7 @@ typedef enum svn_min__longopt_t {
   opt_remove_obsoletes,
   opt_remove_redundant,
   opt_combine_ranges,
+  opt_remove_redundant_misaligned
 } svn_cl__longopt_t;
 
 
@@ -177,6 +178,10 @@ const apr_getopt_option_t svn_min__optio
                        N_("Remove mergeinfo on sub-nodes if it is\n"
                        "                             "
                        "redundant with the parent mergeinfo.")},
+  {"remove-redundant-misaligned", opt_remove_redundant_misaligned, 0,
+                       N_("Remove mergeinfo of a misaligned branch if it\n"
+                       "                             "
+                       "is already covered by a correctly aligned one.\n")},
   {"combine-ranges",   opt_combine_ranges, 0,
                        N_("Try to combine adjacent revision ranges\n"
                        "                             "
@@ -238,14 +243,16 @@ const svn_opt_subcommand_desc2_t svn_min
      "  branches.\n"
     ),
     {opt_targets, opt_depth, 'v',
-     opt_remove_obsoletes, opt_remove_redundant, opt_combine_ranges} },
+     opt_remove_obsoletes, opt_remove_redundant,
+     opt_remove_redundant_misaligned, opt_combine_ranges} },
 
   { "normalize", svn_min__normalize, { 0 }, N_
     ("Normalize / reduce the mergeinfo throughout the working copy sub-tree.\n"
      "usage: normalize [WCPATH...]\n"
      "\n"
-     "  If neither --remove-obsoletes, --remove-redundant nor --combine-ranges\n"
-     "  option is given, --remove-redundant will be used implicitly.\n"
+     "  If neither --remove-obsoletes, --remove-redundant, --combine-ranges\n"
+     "  nor --remove-redundant-misaligned option is given, --remove-redundant\n"
+     "  will be used implicitly.\n"
      "\n"
      "  In non-verbose mode, only general progress as well as a summary before\n"
      "  and after the normalization process will be shown.  Note that sub-node\n"
@@ -278,6 +285,9 @@ const svn_opt_subcommand_desc2_t svn_min
      "                             mergeinfo because they did not change it.\n"
      "    remove deleted branch  - The branch no longer exists in the repository.\n"
      "                             We will remove its mergeinfo line.\n"
+     "    elide misaligned branch- All revisions merged from that misaligned\n"
+     "                             branch have also been merged from the likely\n"
+     "                             correctly aligned branch.\n"
      "    CANNOT elide branch    - Mergeinfo differs from parent's significantly\n"
      "                             and can't be elided because ...\n"
      "      revisions not movable to parent\n"
@@ -300,6 +310,12 @@ const svn_opt_subcommand_desc2_t svn_min
      "    MISSING in parent      - The branch for the parent node exists in the\n"
      "                             repository but is not in its mergeinfo.\n"
      "                             The sub-tree mergeinfo will not be elided.\n"
+     "    CANNOT elide MISALIGNED branch\n"
+     "                             The misaligned branch cannot be elide because\n"
+     "                             the revisions listed ...\n"
+     "      revisions not merged from likely correctly aligned branch\n"
+     "                             ... here have not also been merged from the\n"
+     "                             likely correctly aligned branch.\n"
      "    MISALIGNED branch      - There is no such branch for the parent node.\n"
      "                             The sub-tree mergeinfo cannot be elided.\n"
      "    REVERSE RANGE(S) found - The mergeinfo contains illegal reverse ranges.\n"
@@ -310,7 +326,8 @@ const svn_opt_subcommand_desc2_t svn_min
      "  branches will be removed.  In verbose mode, a list of branches that\n"
      "  could not be removed will be shown per node.\n"),
     {opt_targets, opt_depth, opt_dry_run, 'q', 'v',
-     opt_remove_obsoletes, opt_remove_redundant, opt_combine_ranges} },
+     opt_remove_obsoletes, opt_remove_redundant,
+     opt_remove_redundant_misaligned, opt_combine_ranges} },
 
   { "remove-branches", svn_min__remove_branches, { 0 }, N_
     ("Read a list of branch names from the given file and remove all\n"
@@ -565,6 +582,9 @@ sub_main(int *exit_code, int argc, const
       case opt_combine_ranges:
         opt_state.combine_ranges = TRUE;
         break;
+      case opt_remove_redundant_misaligned:
+        opt_state.remove_redundant_misaligned = TRUE;
+        break;
 
       default:
         /* Hmmm. Perhaps this would be a good place to squirrel away

Modified: subversion/branches/move-tracking-2/tools/dev/unix-build/Makefile.svn
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/dev/unix-build/Makefile.svn?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/dev/unix-build/Makefile.svn (original)
+++ subversion/branches/move-tracking-2/tools/dev/unix-build/Makefile.svn Mon Sep 21 15:26:27 2015
@@ -79,7 +79,7 @@ SERF_OLD_VER	= 0.3.1
 CYRUS_SASL_VER	= 2.1.25
 SQLITE_VER	= 3080500
 LIBMAGIC_VER	= 5.19
-RUBY_VER	= 1.8.7-p358
+RUBY_VER	= 1.8.7-p374
 BZ2_VER	= 1.0.6
 PYTHON_VER	= 2.7.8
 JUNIT_VER	= 4.10
@@ -107,7 +107,7 @@ SHA256_${NEON_DIST} = 2962cfcb5d30f3272e
 SHA256_${CYRUS_SASL_DIST} = 418c16e6240a4f9b637cbe3d62937b9675627bad27c622191d47de8686fe24fe
 SHA256_${SQLITE_DIST} = 98c33abe4106e508e73fda648b2657ac9e969fe24695f543dcde68cc71f3091b
 SHA256_${LIBMAGIC_DIST} = 9484b3bbda1acc7b13a4f71031a85ce10c77bd0ffec7226741a219ef587e3a7c
-SHA256_${RUBY_DIST} = 9e0856d58830e08f1e38233947d859898ae09d4780cb1a502108e41308de33cb
+SHA256_${RUBY_DIST} = 876eeeaaeeab10cbf4767833547d66d86d6717ef48fd3d89e27db8926a65276c
 SHA256_${BZ2_DIST} = a2848f34fcd5d6cf47def00461fcb528a0484d8edef8208d6d2e2909dc61d9cd
 SHA256_${PYTHON_DIST} = 74d70b914da4487aa1d97222b29e9554d042f825f26cb2b93abd20fdda56b557
 SHA256_${JUNIT_DIST} = 36a747ca1e0b86f6ea88055b8723bb87030d627766da6288bf077afdeeb0f75a
@@ -156,7 +156,7 @@ SERF_OLD_URL	= https://svn.apache.org/re
 SQLITE_URL	= https://www.sqlite.org/2014/$(SQLITE_DIST)
 CYRUS_SASL_URL	= ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/$(CYRUS_SASL_DIST)
 LIBMAGIC_URL	= ftp://ftp.astron.com/pub/file/$(LIBMAGIC_DIST)
-RUBY_URL	= http://ftp.ruby-lang.org/pub/ruby/1.8/$(RUBY_DIST)
+RUBY_URL	= https://cache.ruby-lang.org/pub/ruby/1.8/$(RUBY_DIST)
 BZ2_URL		= http://bzip.org/$(BZ2_VER)/$(BZ2_DIST)
 PYTHON_URL	= https://python.org/ftp/python/$(PYTHON_VER)/$(PYTHON_DIST)
 JUNIT_URL	= https://downloads.sourceforge.net/project/junit/junit/$(JUNIT_VER)/$(JUNIT_DIST)
@@ -597,6 +597,8 @@ httpd-reset:
 
 httpd-clean:
 	-(cd $(HTTPD_OBJDIR) && env MAKEFLAGS= make clean)
+	-rm ${HTTPD_OBJDIR}/chil-engine.diff
+	-rm ${HTTPD_OBJDIR}/ssl3.diff
 
 # fetch distfile for httpd
 $(DISTDIR)/$(HTTPD_DIST):
@@ -620,14 +622,31 @@ $(HTTPD_OBJDIR)/chil-engine.diff:
 	echo >>$@.tmp '             ap_log_error(APLOG_MARK, APLOG_ERR, 0, s,'
 	mv -f $@.tmp $@
 
+$(HTTPD_OBJDIR)/ssl3.diff:
+	mkdir -p $(dir $@)
+	echo >$@.tmp '--- support/ab.c.orig	Mon Sep 14 15:33:46 2015'
+	echo >>$@.tmp '+++ support/ab.c	Mon Sep 14 15:34:15 2015'
+	echo >>$@.tmp '@@ -2232,8 +2232,10 @@'
+	echo >>$@.tmp '                 } else if (strncasecmp(optarg, "SSL2", 4) == 0) {'
+	echo >>$@.tmp '                     meth = SSLv2_client_method();'
+	echo >>$@.tmp ' #endif'
+	echo >>$@.tmp '+#ifndef OPENSSL_NO_SSL3'
+	echo >>$@.tmp '                 } else if (strncasecmp(optarg, "SSL3", 4) == 0) {'
+	echo >>$@.tmp '                     meth = SSLv3_client_method();'
+	echo >>$@.tmp '+#endif'
+	echo >>$@.tmp ' #ifdef HAVE_TLSV1_X'
+	echo >>$@.tmp '                 } else if (strncasecmp(optarg, "TLS1.1", 6) == 0) {'
+	echo >>$@.tmp '                     meth = TLSv1_1_client_method();'
+	mv -f $@.tmp $@
 
 # retrieve httpd
 $(HTTPD_OBJDIR)/.retrieved: $(DISTDIR)/$(HTTPD_DIST) \
-	$(HTTPD_OBJDIR)/chil-engine.diff
+	$(HTTPD_OBJDIR)/chil-engine.diff $(HTTPD_OBJDIR)/ssl3.diff
 	$(call do_check_sha256,$(HTTPD_DIST))
 	[ -d $(HTTPD_OBJDIR) ] || mkdir -p $(HTTPD_OBJDIR)
 	tar -C $(SRCDIR) -zxf $(DISTDIR)/$(HTTPD_DIST)
 	cd $(HTTPD_SRCDIR) && patch -p0 < $(HTTPD_OBJDIR)/chil-engine.diff
+	cd $(HTTPD_SRCDIR) && patch -p0 < $(HTTPD_OBJDIR)/ssl3.diff
 	cp $(HTTPD_SRCDIR)/modules/ssl/ssl_toolkit_compat.h \
 		$(HTTPD_SRCDIR)/modules/ssl/ssl_toolkit_compat.h.orig
 	sed '/^#define HAVE_SSL_RAND_EGD/d' \
@@ -1053,6 +1072,11 @@ $(RUBY_OBJDIR)/.retrieved: $(DISTDIR)/$(
 	$(call do_check_sha256,$(RUBY_DIST))
 	[ -d $(RUBY_OBJDIR) ] || mkdir -p $(RUBY_OBJDIR)
 	tar -C $(SRCDIR) -zxf $(DISTDIR)/$(RUBY_DIST)
+	grep -v 'OSSL_SSL_METHOD_ENTRY(SSLv3' \
+		$(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c > \
+		$(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c.nossl3
+	mv $(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c.nossl3 \
+		$(RUBY_SRCDIR)/ext/openssl/ossl_ssl.c
 	touch $@
 
 ifeq ($(THREADING),yes)

Modified: subversion/branches/move-tracking-2/tools/dev/x509-parser.c
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/tools/dev/x509-parser.c?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/tools/dev/x509-parser.c (original)
+++ subversion/branches/move-tracking-2/tools/dev/x509-parser.c Mon Sep 21 15:26:27 2015
@@ -158,7 +158,7 @@ int main (int argc, const char *argv[])
     }
   else if (argc == 1)
     {
-      err = svn_stream_for_stdin(&in, pool);
+      err = svn_stream_for_stdin2(&in, TRUE, pool);
     }
   else
     err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL, _("Too many arguments"));

Modified: subversion/branches/move-tracking-2/win-tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/move-tracking-2/win-tests.py?rev=1704320&r1=1704319&r2=1704320&view=diff
==============================================================================
--- subversion/branches/move-tracking-2/win-tests.py (original)
+++ subversion/branches/move-tracking-2/win-tests.py Mon Sep 21 15:26:27 2015
@@ -31,6 +31,7 @@ import os, sys, subprocess
 import filecmp
 import shutil
 import traceback
+import logging
 try:
   # Python >=3.0
   import configparser
@@ -59,7 +60,6 @@ def _usage_exit():
   print("  -u URL, --url=URL      : run ra_dav or ra_svn tests against URL;")
   print("                           will start svnserve for ra_svn tests")
   print("  -v, --verbose          : talk more")
-  print("  -q, --quiet            : talk less")
   print("  -f, --fs-type=type     : filesystem type to use (fsfs is default)")
   print("  -c, --cleanup          : cleanup after running a test")
   print("  -t, --test=TEST        : Run the TEST test (all is default); use")
@@ -108,6 +108,8 @@ def _usage_exit():
   print("  --config-file          : Configuration file for tests")
   print("  --fsfs-sharding        : Specify shard size (for fsfs)")
   print("  --fsfs-packing         : Run 'svnadmin pack' automatically")
+  print("  -q, --quiet            : Deprecated; this is the default.")
+  print("                           Use --set-log-level instead.")
 
   sys.exit(0)
 
@@ -141,7 +143,7 @@ if len(args) > 1:
   print('Warning: non-option arguments after the first one will be ignored')
 
 # Interpret the options and set parameters
-base_url, fs_type, verbose, quiet, cleanup = None, None, None, None, None
+base_url, fs_type, verbose, cleanup = None, None, None, None
 repo_loc = 'local repository.'
 objdir = 'Debug'
 log = 'tests.log'
@@ -187,8 +189,7 @@ for opt, val in opts:
     fs_type = val
   elif opt in ('-v', '--verbose'):
     verbose = 1
-  elif opt in ('-q', '--quiet'):
-    quiet = 1
+    log_level = logging.DEBUG
   elif opt in ('-c', '--cleanup'):
     cleanup = 1
   elif opt in ('-t', '--test'):
@@ -250,7 +251,7 @@ for opt, val in opts:
   elif opt == '--log-to-stdout':
     log_to_stdout = 1
   elif opt == '--log-level':
-    log_level = val
+    log_level = getattr(logging, val, None) or int(val)
   elif opt == '--ssl-cert':
     ssl_cert = val
   elif opt == '--exclusive-wc-locks':
@@ -999,7 +1000,6 @@ if not test_javahl and not test_swig:
   opts.fs_type = fs_type
   opts.http_library = 'serf'
   opts.server_minor_version = server_minor_version
-  opts.verbose = not quiet
   opts.cleanup = cleanup
   opts.enable_sasl = enable_sasl
   opts.parallel = parallel

Propchange: subversion/branches/move-tracking-2/win-tests.py
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Sep 21 15:26:27 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-1701347
+/subversion/trunk/win-tests.py:1606692-1704317