subversion-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From br...@apache.org
Subject svn commit: r1662177 [13/18] - in /subversion/branches/reuse-ra-session: ./ build/ build/generator/ contrib/client-side/svncopy/ subversion/bindings/javahl/native/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/bindings/javahl/...
Date Wed, 25 Feb 2015 08:15:42 GMT
Modified: subversion/branches/reuse-ra-session/subversion/svn/cl.h
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/cl.h?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/cl.h (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/cl.h Wed Feb 25 08:15:39 2015
@@ -248,6 +248,7 @@ typedef struct svn_cl__opt_state_t
   svn_boolean_t remove_ignored;    /* remove ignored items */
   svn_boolean_t no_newline;        /* do not output the trailing newline */
   svn_boolean_t show_passwords;    /* show cached passwords */
+  svn_boolean_t pin_externals;     /* pin externals to last-changed revisions */
 } svn_cl__opt_state_t;
 
 
@@ -296,8 +297,7 @@ svn_opt_subcommand_t
   svn_cl__switch,
   svn_cl__unlock,
   svn_cl__update,
-  svn_cl__upgrade,
-  svn_cl__youngest;
+  svn_cl__upgrade;
 
 
 /* See definition in svn.c for documentation. */

Modified: subversion/branches/reuse-ra-session/subversion/svn/commit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/commit-cmd.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/commit-cmd.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/commit-cmd.c Wed Feb 25 08:15:39 2015
@@ -137,7 +137,9 @@ svn_cl__commit(apr_getopt_t *os,
   if (opt_state->depth == svn_depth_unknown)
     opt_state->depth = svn_depth_infinity;
 
-  cfg = svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG);
+  cfg = ctx->config
+           ? svn_hash_gets(ctx->config, SVN_CONFIG_CATEGORY_CONFIG)
+           : NULL;
   if (cfg)
     SVN_ERR(svn_config_get_bool(cfg, &no_unlock,
                                 SVN_CONFIG_SECTION_MISCELLANY,

Modified: subversion/branches/reuse-ra-session/subversion/svn/copy-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/copy-cmd.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/copy-cmd.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/copy-cmd.c Wed Feb 25 08:15:39 2015
@@ -167,8 +167,11 @@ svn_cl__copy(apr_getopt_t *os,
     SVN_ERR(svn_cl__make_log_msg_baton(&(ctx->log_msg_baton3), opt_state,
                                        NULL, ctx->config, pool));
 
-  err = svn_client_copy6(sources, dst_path, TRUE,
+  err = svn_client_copy7(sources, dst_path, TRUE,
                          opt_state->parents, opt_state->ignore_externals,
+                         FALSE /* metadata_only */,
+                         opt_state->pin_externals,
+                         NULL, /* pin all externals */
                          opt_state->revprop_table,
                          (opt_state->quiet ? NULL : svn_cl__print_commit_info),
                          NULL,

Modified: subversion/branches/reuse-ra-session/subversion/svn/diff-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/diff-cmd.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/diff-cmd.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/diff-cmd.c Wed Feb 25 08:15:39 2015
@@ -344,7 +344,7 @@ svn_cl__diff(apr_getopt_t *os,
     {
       ignore_content_type = TRUE;
     }
-  else
+  else if (ctx->config)
     {
       SVN_ERR(svn_config_get_bool(svn_hash_gets(ctx->config,
                                                 SVN_CONFIG_CATEGORY_CONFIG),
@@ -353,6 +353,10 @@ svn_cl__diff(apr_getopt_t *os,
                                   SVN_CONFIG_OPTION_DIFF_IGNORE_CONTENT_TYPE,
                                   FALSE));
     }
+  else
+    {
+      ignore_content_type = FALSE;
+    }
 
   svn_opt_push_implicit_dot_target(targets, pool);
 

Modified: subversion/branches/reuse-ra-session/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/info-cmd.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/info-cmd.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/info-cmd.c Wed Feb 25 08:15:39 2015
@@ -389,30 +389,18 @@ print_info(void *baton,
         SVN_ERR(svn_cmdline_printf(pool, _("Copied From Rev: %ld\n"),
                                    info->wc_info->copyfrom_rev));
       if (info->wc_info->moved_from_abspath)
-        {
-          const char *relpath;
-
-          relpath = svn_dirent_skip_ancestor(info->wc_info->wcroot_abspath,
-                                             info->wc_info->moved_from_abspath);
-          if (relpath && relpath[0] != '\0')
-            SVN_ERR(svn_cmdline_printf(pool, _("Moved From: %s\n"), relpath));
-          else
-            SVN_ERR(svn_cmdline_printf(pool, _("Moved From: %s\n"),
-                                       info->wc_info->moved_from_abspath));
-        }
+        SVN_ERR(svn_cmdline_printf(pool, _("Moved From: %s\n"),
+                                   svn_cl__local_style_skip_ancestor(
+                                      path_prefix,
+                                      info->wc_info->moved_from_abspath,
+                                      pool)));
 
       if (info->wc_info->moved_to_abspath)
-        {
-          const char *relpath;
-
-          relpath = svn_dirent_skip_ancestor(info->wc_info->wcroot_abspath,
-                                             info->wc_info->moved_to_abspath);
-          if (relpath && relpath[0] != '\0')
-            SVN_ERR(svn_cmdline_printf(pool, _("Moved To: %s\n"), relpath));
-          else
-            SVN_ERR(svn_cmdline_printf(pool, _("Moved To: %s\n"),
-                                       info->wc_info->moved_to_abspath));
-        }
+        SVN_ERR(svn_cmdline_printf(pool, _("Moved To: %s\n"),
+                                   svn_cl__local_style_skip_ancestor(
+                                      path_prefix,
+                                      info->wc_info->moved_to_abspath,
+                                      pool)));
     }
 
   if (info->last_changed_author)
@@ -441,6 +429,7 @@ print_info(void *baton,
       if (info->wc_info->conflicts)
         {
           svn_boolean_t printed_prop_conflict_file = FALSE;
+          svn_boolean_t printed_tc = FALSE;
           int i;
 
           for (i = 0; i < info->wc_info->conflicts->nelts; i++)
@@ -479,12 +468,15 @@ print_info(void *baton,
                     if (! printed_prop_conflict_file)
                       SVN_ERR(svn_cmdline_printf(pool,
                                 _("Conflict Properties File: %s\n"),
-                                svn_dirent_local_style(conflict->their_abspath,
-                                                       pool)));
+                                svn_cl__local_style_skip_ancestor(
+                                        path_prefix,
+                                        conflict->prop_reject_abspath,
+                                        pool)));
                     printed_prop_conflict_file = TRUE;
                   break;
 
                   case svn_wc_conflict_kind_tree:
+                    printed_tc = TRUE;
                     SVN_ERR(
                         svn_cl__get_human_readable_tree_conflict_description(
                                                     &desc, conflict, pool));
@@ -506,6 +498,19 @@ print_info(void *baton,
                   APR_ARRAY_IDX(info->wc_info->conflicts, 0,
                                 const svn_wc_conflict_description2_t *);
 
+            if (!printed_tc)
+              {
+                const char *desc;
+
+                SVN_ERR(svn_cl__get_human_readable_action_description(&desc,
+                                        svn_wc_conflict_action_edit,
+                                        conflict->operation,
+                                        conflict->node_kind, pool));
+
+                SVN_ERR(svn_cmdline_printf(pool, "%s: %s\n",
+                                               _("Conflict Details"), desc));
+              }
+
             src_left_version =
                         svn_cl__node_description(conflict->src_left_version,
                                                  info->repos_root_URL, pool);

Modified: subversion/branches/reuse-ra-session/subversion/svn/mergeinfo-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/mergeinfo-cmd.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/mergeinfo-cmd.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/mergeinfo-cmd.c Wed Feb 25 08:15:39 2015
@@ -240,7 +240,7 @@ mergeinfo_summary(
 
   target_is_wc = (! svn_path_is_url(target_path_or_url))
                  && (target_revision->kind == svn_opt_revision_unspecified
-                     || target_revision->kind == svn_opt_revision_working 
+                     || target_revision->kind == svn_opt_revision_working
                      || target_revision->kind == svn_opt_revision_base);
   SVN_ERR(svn_client_get_merging_summary(
             &is_reintegration,
@@ -304,10 +304,10 @@ mergeinfo_log(svn_boolean_t finding_merg
       baton->show_diff = FALSE;
       baton->depth = depth;
       baton->diff_extensions = NULL;
-      baton->merge_stack = NULL; 
+      baton->merge_stack = NULL;
       baton->search_patterns = NULL;
       baton->pool = pool;
-      log_receiver_baton = baton; 
+      log_receiver_baton = baton;
     }
   else
     {

Modified: subversion/branches/reuse-ra-session/subversion/svn/notify.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/notify.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/notify.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/notify.c Wed Feb 25 08:15:39 2015
@@ -129,7 +129,7 @@ svn_cl__conflict_stats_resolved(svn_cl__
 static const char *
 remaining_str(apr_pool_t *pool, int n_remaining)
 {
-  return apr_psprintf(pool, Q_("%d remaining", 
+  return apr_psprintf(pool, Q_("%d remaining",
                                "%d remaining",
                                n_remaining),
                       n_remaining);

Modified: subversion/branches/reuse-ra-session/subversion/svn/propget-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/propget-cmd.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/propget-cmd.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/propget-cmd.c Wed Feb 25 08:15:39 2015
@@ -490,7 +490,7 @@ svn_cl__propget(apr_getopt_t *os,
             {
               svn_error_t *err;
               err = svn_error_createf(SVN_ERR_PROPERTY_NOT_FOUND, NULL,
-                                      _("Property '%s' not found on '%s'"), 
+                                      _("Property '%s' not found on '%s'"),
                                       pname_utf8, target);
               svn_handle_warning2(stderr, err, "svn: ");
               svn_error_clear(err);

Modified: subversion/branches/reuse-ra-session/subversion/svn/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/status.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/status.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/status.c Wed Feb 25 08:15:39 2015
@@ -138,37 +138,38 @@ generate_status_desc(enum svn_wc_status_
 
 /* Make a relative path containing '..' elements as needed.
    TARGET_ABSPATH shall be the absolute version of TARGET_PATH.
-   TARGET_ABSPATH, TARGET_PATH and PATH shall be canonical.
+   TARGET_ABSPATH, TARGET_PATH and LOCAL_ABSPATH shall be canonical
 
    If above conditions are met, a relative path that leads to PATH
    from TARGET_PATH is returned, but there is no error checking involved.
 
    The returned path is allocated from RESULT_POOL, all other
-   allocations are made in SCRATCH_POOL.  */
+   allocations are made in SCRATCH_POOL.
+
+   Note that it is not possible to just join the resulting path to
+   reconstruct the real path as the "../" paths are relative from
+   a different base than the normal relative paths!
+ */
 static const char *
 make_relpath(const char *target_abspath,
              const char *target_path,
-             const char *path,
+             const char *local_abspath,
              apr_pool_t *result_pool,
              apr_pool_t *scratch_pool)
 {
   const char *la;
   const char *parent_dir_els = "";
-  const char *abspath, *relative;
-  svn_error_t *err = svn_dirent_get_absolute(&abspath, path, scratch_pool);
+  const char *t_relpath;
+  const char *p_relpath;
 
-  if (err)
-    {
-      /* We probably got passed some invalid path. */
-      svn_error_clear(err);
-      return apr_pstrdup(result_pool, path);
-    }
+#ifdef SVN_DEBUG
+  SVN_ERR_ASSERT_NO_RETURN(svn_dirent_is_absolute(local_abspath));
+#endif
 
-  relative = svn_dirent_skip_ancestor(target_abspath, abspath);
-  if (relative)
-    {
-      return svn_dirent_join(target_path, relative, result_pool);
-    }
+  t_relpath = svn_dirent_skip_ancestor(target_abspath, local_abspath);
+
+  if (t_relpath)
+    return svn_dirent_join(target_path, t_relpath, result_pool);
 
   /* An example:
    *  relative_to_path = /a/b/c
@@ -180,17 +181,16 @@ make_relpath(const char *target_abspath,
    *  path             = C:/wc
    *  result           = C:/wc
    */
-
   /* Skip the common ancestor of both paths, here '/a'. */
-  la = svn_dirent_get_longest_ancestor(target_abspath, abspath,
+  la = svn_dirent_get_longest_ancestor(target_abspath, local_abspath,
                                        scratch_pool);
   if (*la == '\0')
     {
       /* Nothing in common: E.g. C:/ vs F:/ on Windows */
-      return apr_pstrdup(result_pool, path);
+      return apr_pstrdup(result_pool, local_abspath);
     }
-  relative = svn_dirent_skip_ancestor(la, target_abspath);
-  path = svn_dirent_skip_ancestor(la, path);
+  t_relpath = svn_dirent_skip_ancestor(la, target_abspath);
+  p_relpath = svn_dirent_skip_ancestor(la, local_abspath);
 
   /* In above example, we'd now have:
    *  relative_to_path = b/c
@@ -198,14 +198,14 @@ make_relpath(const char *target_abspath,
 
   /* Count the elements of relative_to_path and prepend as many '..' elements
    * to path. */
-  while (*relative)
+  while (*t_relpath)
     {
-      svn_dirent_split(&relative, NULL, relative,
-                       scratch_pool);
+      t_relpath = svn_dirent_dirname(t_relpath, scratch_pool);
       parent_dir_els = svn_dirent_join(parent_dir_els, "..", scratch_pool);
     }
 
-  return svn_dirent_join(parent_dir_els, path, result_pool);
+  /* This returns a ../ style path relative from the status target */
+  return svn_dirent_join(parent_dir_els, p_relpath, result_pool);
 }
 
 
@@ -232,8 +232,6 @@ print_status(const char *target_abspath,
   const char *moved_from_line = "";
   const char *moved_to_line = "";
 
-  path = make_relpath(target_abspath, target_path, path, pool, pool);
-
   /* For historic reasons svn ignores the property status for added nodes, even
      if these nodes were copied and have local property changes.
 
@@ -487,8 +485,6 @@ svn_cl__print_status_xml(const char *tar
     SVN_ERR(svn_wc_conflicted_p3(NULL, NULL, &tree_conflicted,
                                  ctx->wc_ctx, local_abspath, pool));
 
-  path = make_relpath(target_abspath, target_path, path, pool, pool);
-
   svn_xml_make_open_tag(&sb, pool, svn_xml_normal, "entry",
                         "path", svn_dirent_local_style(path, pool),
                         SVN_VA_NULL);

Modified: subversion/branches/reuse-ra-session/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/svn.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/svn.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/svn.c Wed Feb 25 08:15:39 2015
@@ -144,7 +144,8 @@ typedef enum svn_cl__longopt_t {
   opt_remove_unversioned,
   opt_remove_ignored,
   opt_no_newline,
-  opt_show_passwords
+  opt_show_passwords,
+  opt_pin_externals,
 } svn_cl__longopt_t;
 
 
@@ -418,6 +419,10 @@ const apr_getopt_option_t svn_cl__option
   {"remove-ignored", opt_remove_ignored, 0, N_("remove ignored items")},
   {"no-newline", opt_no_newline, 0, N_("do not output the trailing newline")},
   {"show-passwords", opt_show_passwords, 0, N_("show cached passwords")},
+  {"pin-externals", opt_pin_externals, 0,
+                       N_("pin externals with no explicit revision to their\n"
+                          "                             "
+                          "current revision (recommended when tagging)")},
 
   /* Long-opt Aliases
    *
@@ -498,16 +503,31 @@ const svn_opt_subcommand_desc2_t svn_cl_
     "  expand them.\n"),
     { opt_remove, opt_show_passwords },
     { {opt_remove, N_("remove matching authentication credentials")} }
-    
+
     },
 
   { "blame", svn_cl__blame, {"praise", "annotate", "ann"}, N_
-    ("Output the content of specified files or\n"
-     "URLs with revision and author information in-line.\n"
-     "usage: blame TARGET[@REV]...\n"
+    ("Show when each line of a file was last (or\n"
+     "next) changed.\n"
+     "usage: blame [-rM:N] TARGET[@REV]...\n"
+     "\n"
+     "  Annotate each line of a file with the revision number and author of the\n"
+     "  last change (or optionally the next change) to that line.\n"
+     "\n"
+     "  With no revision range (same as -r0:REV), or with '-r M:N' where M < N,\n"
+     "  annotate each line that is present in revision N of the file, with\n"
+     "  the last revision at or before rN that changed or added the line,\n"
+     "  looking back no further than rM.\n"
+     "\n"
+     "  With a reverse revision range '-r M:N' where M > N,\n"
+     "  annotate each line that is present in revision N of the file, with\n"
+     "  the next revision after rN that changed or deleted the line,\n"
+     "  looking forward no further than rM.\n"
      "\n"
      "  If specified, REV determines in which revision the target is first\n"
-     "  looked up.\n"),
+     "  looked up.\n"
+     "\n"
+     "  Write the annotated result to standard output.\n"),
     {'r', 'v', 'g', opt_incremental, opt_xml, 'x', opt_force} },
 
   { "cat", svn_cl__cat, {0}, N_
@@ -608,7 +628,8 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  contact the repository.  As such, they may not, by default, be able\n"
      "  to propagate merge tracking information from the source of the copy\n"
      "  to the destination.\n"),
-    {'r', 'q', opt_ignore_externals, opt_parents, SVN_CL__LOG_MSG_OPTIONS} },
+    {'r', 'q', opt_ignore_externals, opt_parents, SVN_CL__LOG_MSG_OPTIONS,
+     opt_pin_externals} },
 
   { "delete", svn_cl__delete, {"del", "remove", "rm"}, N_
     ("Remove files and directories from version control.\n"
@@ -1717,14 +1738,6 @@ const svn_opt_subcommand_desc2_t svn_cl_
      "  Local modifications are preserved.\n"),
     { 'q' } },
 
-  { "youngest", svn_cl__youngest, {0}, N_
-    ("Print the youngest revision number of a target's repository.\n"
-     "usage: youngest [TARGET]\n"
-     "\n"
-     "  Print the revision number of the youngest revision in the repository\n"
-     "  with which TARGET is associated.\n"),
-    { opt_no_newline } },
-
   { NULL, NULL, {0}, NULL, {0} }
 };
 
@@ -2390,6 +2403,9 @@ sub_main(int *exit_code, int argc, const
       case opt_show_passwords:
         opt_state.show_passwords = TRUE;
         break;
+      case opt_pin_externals:
+        opt_state.pin_externals = TRUE;
+        break;
       default:
         /* Hmmm. Perhaps this would be a good place to squirrel away
            opts that commands like svn diff might need. Hmmm indeed. */

Modified: subversion/branches/reuse-ra-session/subversion/svn/util.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svn/util.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svn/util.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svn/util.c Wed Feb 25 08:15:39 2015
@@ -75,6 +75,13 @@ svn_cl__print_commit_info(const svn_comm
                           void *baton,
                           apr_pool_t *pool)
 {
+  /* Be very careful with returning errors from this callback as those
+     will be returned as errors from editor->close_edit(...), which may
+     cause callers to assume that the commit itself failed.
+
+     See log message of r1659867 and the svn_ra_get_commit_editor3
+     documentation for details on error scenarios. */
+
   if (SVN_IS_VALID_REVNUM(commit_info->revision))
     SVN_ERR(svn_cmdline_printf(pool, _("Committed revision %ld%s.\n"),
                                commit_info->revision,
@@ -197,7 +204,7 @@ svn_cl__make_log_msg_baton(void **baton,
                            apr_hash_t *config,
                            apr_pool_t *pool)
 {
-  struct log_msg_baton *lmb = apr_palloc(pool, sizeof(*lmb));
+  struct log_msg_baton *lmb = apr_pcalloc(pool, sizeof(*lmb));
 
   if (opt_state->filedata)
     {
@@ -230,8 +237,10 @@ svn_cl__make_log_msg_baton(void **baton,
                      SVN_CONFIG_OPTION_LOG_ENCODING,
                      NULL);
     }
+  else
+    lmb->message_encoding = NULL;
 
-  lmb->base_dir = base_dir ? base_dir : "";
+  lmb->base_dir = base_dir;
   lmb->tmpfile_left = NULL;
   lmb->config = config;
   lmb->keep_locks = opt_state->no_unlock;
@@ -383,14 +392,11 @@ svn_cl__get_log_message(const char **log
 
           if (! path)
             path = item->url;
-          else if (! *path)
-            path = ".";
-
-          if (! svn_path_is_url(path) && lmb->base_dir)
+          else if (lmb->base_dir)
             path = svn_dirent_is_child(lmb->base_dir, path, pool);
 
           /* If still no path, then just use current directory. */
-          if (! path)
+          if (! path || !*path)
             path = ".";
 
           if ((item->state_flags & SVN_CLIENT_COMMIT_ITEM_DELETE)
@@ -429,7 +435,8 @@ svn_cl__get_log_message(const char **log
       if (! lmb->non_interactive)
         {
           err = svn_cmdline__edit_string_externally(&msg_string, &lmb->tmpfile_left,
-                                                    lmb->editor_cmd, lmb->base_dir,
+                                                    lmb->editor_cmd,
+                                                    lmb->base_dir ? lmb->base_dir : "",
                                                     msg_string, "svn-commit",
                                                     lmb->config, TRUE,
                                                     lmb->message_encoding,

Modified: subversion/branches/reuse-ra-session/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnadmin/svnadmin.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svnadmin/svnadmin.c Wed Feb 25 08:15:39 2015
@@ -906,7 +906,7 @@ repos_notify_handler(void *baton,
           if (b->error_summary && notify->revision != SVN_INVALID_REVNUM)
             {
               struct verification_error *verr;
-              
+
               verr = apr_palloc(b->result_pool, sizeof(*verr));
               verr->rev = notify->revision;
               verr->err = svn_error_dup(notify->err);
@@ -1880,7 +1880,7 @@ subcommand_verify(apr_getopt_t *os, void
           struct verification_error *verr;
           svn_error_t *err;
           const char *rev_str;
-          
+
           svn_pool_clear(iterpool);
 
           verr = APR_ARRAY_IDX(notify_baton.error_summary, i,
@@ -1892,7 +1892,7 @@ subcommand_verify(apr_getopt_t *os, void
             {
               char buf[512];
               const char *message;
-              
+
               message = svn_err_best_message(err, buf, sizeof(buf));
               svn_error_clear(svn_stream_printf(notify_baton.feedback_stream,
                                                 iterpool,

Modified: subversion/branches/reuse-ra-session/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svndumpfilter/svndumpfilter.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svndumpfilter/svndumpfilter.c Wed Feb 25 08:15:39 2015
@@ -278,7 +278,7 @@ struct node_baton_t
   svn_filesize_t tcl;
 
   /* Pointers to dumpfile data. */
-  apr_array_header_t *headers;
+  svn_repos__dumpfile_headers_t *headers;
   svn_stringbuf_t *props;
 
   /* Expect deltas? */

Modified: subversion/branches/reuse-ra-session/subversion/svnrdump/dump_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnrdump/dump_editor.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnrdump/dump_editor.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svnrdump/dump_editor.c Wed Feb 25 08:15:39 2015
@@ -58,7 +58,7 @@ struct dir_baton
   svn_revnum_t copyfrom_rev;
 
   /* Headers accumulated so far for this directory */
-  apr_array_header_t *headers;
+  svn_repos__dumpfile_headers_t *headers;
 
   /* Properties which were modified during change_dir_prop. */
   apr_hash_t *props;
@@ -72,9 +72,8 @@ struct dir_baton
      us, although they're all really within this directory. */
   apr_hash_t *deleted_entries;
 
-  /* Flags to trigger dumping props and record termination newlines. */
+  /* Flag to trigger dumping props. */
   svn_boolean_t dump_props;
-  svn_boolean_t dump_newlines;
 };
 
 /* A file baton used by all file-related callback functions in the dump
@@ -223,7 +222,7 @@ make_file_baton(const char *path,
  * content section, to represent the property delta of PROPS/DELETED_PROPS.
  */
 static svn_error_t *
-get_props_content(apr_array_header_t *headers,
+get_props_content(svn_repos__dumpfile_headers_t *headers,
                   svn_stringbuf_t **content,
                   apr_hash_t *props,
                   apr_hash_t *deleted_props,
@@ -262,7 +261,8 @@ dump_node_delete(svn_stream_t *stream,
                  const char *node_relpath,
                  apr_pool_t *pool)
 {
-  apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+  svn_repos__dumpfile_headers_t *headers
+    = svn_repos__dumpfile_headers_create(pool);
 
   assert(svn_relpath_is_canonical(node_relpath));
 
@@ -274,7 +274,9 @@ dump_node_delete(svn_stream_t *stream,
   svn_repos__dumpfile_header_push(
     headers, SVN_REPOS_DUMPFILE_NODE_ACTION, "delete");
 
-  SVN_ERR(svn_repos__dump_headers(stream, headers, TRUE, pool));
+  SVN_ERR(svn_repos__dump_node_record(stream, headers,
+                                      NULL, FALSE, 0,  /* props & text */
+                                      FALSE /*content_length_always*/, pool));
   return SVN_NO_ERROR;
 }
 
@@ -296,7 +298,7 @@ dump_node_delete(svn_stream_t *stream,
  * header block.)
  */
 static svn_error_t *
-dump_node(apr_array_header_t **headers_p,
+dump_node(svn_repos__dumpfile_headers_t **headers_p,
           struct dump_edit_baton *eb,
           const char *repos_relpath,
           struct dir_baton *db,
@@ -308,7 +310,8 @@ dump_node(apr_array_header_t **headers_p
           apr_pool_t *pool)
 {
   const char *node_relpath = repos_relpath;
-  apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+  svn_repos__dumpfile_headers_t *headers
+    = svn_repos__dumpfile_headers_create(pool);
 
   assert(svn_relpath_is_canonical(repos_relpath));
   assert(!copyfrom_path || svn_relpath_is_canonical(copyfrom_path));
@@ -394,16 +397,6 @@ dump_node(apr_array_header_t **headers_p
             headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV, "%ld", copyfrom_rev);
           svn_repos__dumpfile_header_push(
             headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_PATH, copyfrom_path);
-
-          /* Ugly hack: If a directory was copied from a previous
-             revision, nothing like close_file() will be called to write two
-             blank lines. If change_dir_prop() is called, props are dumped
-             (along with the necessary PROPS-END\n\n and we're good. So
-             set DUMP_NEWLINES here to print the newlines unless
-             change_dir_prop() is called next otherwise the `svnadmin load`
-             parser will fail.  */
-          if (db)
-            db->dump_newlines = TRUE;
         }
       else
         {
@@ -445,7 +438,8 @@ dump_mkdir(struct dump_edit_baton *eb,
            apr_pool_t *pool)
 {
   svn_stringbuf_t *prop_content;
-  apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+  svn_repos__dumpfile_headers_t *headers
+    = svn_repos__dumpfile_headers_create(pool);
 
   /* Node-path: ... */
   svn_repos__dumpfile_header_push(
@@ -496,25 +490,18 @@ dump_pending_dir(struct dump_edit_baton
                                       FALSE, 0, FALSE /*content_length_always*/,
                                       scratch_pool));
 
+  /* No text is going to be dumped. Write a couple of newlines and
+       wait for the next node/ revision. */
+  SVN_ERR(svn_stream_puts(eb->stream, "\n\n"));
+
   if (db->dump_props)
     {
-      /* No text is going to be dumped. Write a couple of newlines and
-         wait for the next node/ revision. */
-      SVN_ERR(svn_stream_puts(eb->stream, "\n\n"));
-
       /* Cleanup so that data is never dumped twice. */
       apr_hash_clear(db->props);
       apr_hash_clear(db->deleted_props);
       db->dump_props = FALSE;
     }
 
-  /* Some pending newlines to dump? */
-  if (db->dump_newlines)
-    {
-      SVN_ERR(svn_stream_puts(eb->stream, "\n\n"));
-      db->dump_newlines = FALSE;
-    }
-
   /* Anything that was pending is pending no longer. */
   eb->pending_db = NULL;
 
@@ -828,9 +815,7 @@ change_dir_prop(void *parent_baton,
   else
     svn_hash_sets(db->deleted_props, apr_pstrdup(db->pool, name), "");
 
-  /* Make sure we eventually output the props, and disable printing
-     a couple of extra newlines */
-  db->dump_newlines = FALSE;
+  /* Make sure we eventually output the props */
   db->dump_props = TRUE;
 
   return SVN_NO_ERROR;
@@ -896,7 +881,7 @@ close_file(void *file_baton,
   struct dump_edit_baton *eb = fb->eb;
   apr_finfo_t *info = apr_pcalloc(pool, sizeof(apr_finfo_t));
   svn_stringbuf_t *propstring = NULL;
-  apr_array_header_t *headers;
+  svn_repos__dumpfile_headers_t *headers;
 
   SVN_ERR(dump_pending_dir(eb, pool));
 

Modified: subversion/branches/reuse-ra-session/subversion/svnserve/logger.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnserve/logger.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnserve/logger.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svnserve/logger.c Wed Feb 25 08:15:39 2015
@@ -58,7 +58,7 @@ logger__create_for_stderr(logger_t **log
 {
   logger_t *result = apr_pcalloc(pool, sizeof(*result));
   result->pool = svn_pool_create(pool);
-  
+
   SVN_ERR(svn_stream_for_stderr(&result->stream, pool));
   SVN_ERR(svn_mutex__init(&result->mutex, TRUE, pool));
 
@@ -74,7 +74,7 @@ logger__create(logger_t **logger,
 {
   logger_t *result = apr_pcalloc(pool, sizeof(*result));
   apr_file_t *file;
-  
+
   SVN_ERR(svn_io_file_open(&file, filename,
                            APR_WRITE | APR_CREATE | APR_APPEND,
                            APR_OS_DEFAULT, pool));
@@ -145,7 +145,7 @@ logger__log_error(logger_t *logger,
         }
 
       svn_pool_clear(logger->pool);
-      
+
       svn_error_clear(svn_mutex__unlock(logger->mutex, SVN_NO_ERROR));
     }
 }

Modified: subversion/branches/reuse-ra-session/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnserve/serve.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnserve/serve.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svnserve/serve.c Wed Feb 25 08:15:39 2015
@@ -2179,7 +2179,7 @@ static svn_error_t *log_receiver(void *b
         }
     }
   SVN_ERR(svn_ra_svn__end_list(conn, pool));
-  
+
   /* send LOG_ENTRY main members */
   SVN_ERR(svn_ra_svn__write_data_log_entry(conn, pool,
                                            log_entry->revision,
@@ -2856,7 +2856,7 @@ static svn_error_t *lock_many(svn_ra_svn
                                           &current_rev);
       if (write_err)
         break;
-      
+
       full_path = svn_fspath__join(b->repository->fs_path->data,
                                    svn_relpath_canonicalize(path, subpool),
                                    subpool);
@@ -3755,7 +3755,7 @@ construct_server_baton(server_baton_t **
   server_baton_t *b = apr_pcalloc(conn_pool, sizeof(*b));
   fs_warning_baton_t *warn_baton;
   svn_stringbuf_t *cap_log = svn_stringbuf_create_empty(scratch_pool);
-  
+
   b->repository = apr_pcalloc(conn_pool, sizeof(*b->repository));
   b->repository->username_case = params->username_case;
   b->repository->base = params->base;
@@ -3857,7 +3857,7 @@ construct_server_baton(server_baton_t **
   err = handle_config_error(find_repos(client_url, params->root, b->vhost,
                                        b->read_only, params->cfg,
                                        b->repository, params->config_pool,
-                                       params->authz_pool, params->fs_config, 
+                                       params->authz_pool, params->fs_config,
                                        conn_pool, scratch_pool),
                             b);
   if (!err)

Modified: subversion/branches/reuse-ra-session/subversion/svnserve/server.h
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnserve/server.h?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnserve/server.h (original)
+++ subversion/branches/reuse-ra-session/subversion/svnserve/server.h Wed Feb 25 08:15:39 2015
@@ -40,7 +40,7 @@ extern "C" {
 #include "private/svn_mutex.h"
 #include "private/svn_repos_private.h"
 #include "private/svn_subr_private.h"
-  
+
 enum username_case_type { CASE_FORCE_UPPER, CASE_FORCE_LOWER, CASE_ASIS };
 
 enum authn_type { UNAUTHENTICATED, AUTHENTICATED };
@@ -70,7 +70,7 @@ typedef struct repository_t {
 
   enum access_type auth_access; /* access granted to authenticated users */
   enum access_type anon_access; /* access granted to annonymous users */
-  
+
 } repository_t;
 
 typedef struct client_info_t {
@@ -186,7 +186,7 @@ typedef struct connection_t
      the new thread decrease it and when it reaches 0 the pool can be
      released.  */
   svn_atomic_t ref_count;
-  
+
 } connection_t;
 
 /* Return a client_info_t structure allocated in POOL and initialize it

Modified: subversion/branches/reuse-ra-session/subversion/svnserve/svnserve.c
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/svnserve/svnserve.c?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/svnserve/svnserve.c (original)
+++ subversion/branches/reuse-ra-session/subversion/svnserve/svnserve.c Wed Feb 25 08:15:39 2015
@@ -126,7 +126,7 @@ enum run_mode {
  *
  * Since very slow connections will hog a full thread for a potentially
  * long time before timing out, be sure to not set this limit too low.
- * 
+ *
  * On the other hand, keep in mind that every thread will allocate up to
  * 4MB of unused RAM in the APR allocator of its root pool.  32 bit servers
  * must hence do with fewer threads.
@@ -150,7 +150,7 @@ enum run_mode {
  *
  * Larger values improve scalability with lots of small requests coming
  * on over long latency networks.
- * 
+ *
  * The OS may actually use a lower limit than specified here.
  */
 #define ACCEPT_BACKLOG 128
@@ -475,7 +475,7 @@ static apr_status_t redirect_stdout(void
 /* Wait for the next client connection to come in from SOCK.  Allocate
  * the connection in a root pool from CONNECTION_POOLS and assign PARAMS.
  * Return the connection object in *CONNECTION.
- * 
+ *
  * Use HANDLING_MODE for proper internal cleanup.
  */
 static svn_error_t *
@@ -486,30 +486,30 @@ accept_connection(connection_t **connect
                   apr_pool_t *pool)
 {
   apr_status_t status;
-  
+
   /* Non-standard pool handling.  The main thread never blocks to join
    *         the connection threads so it cannot clean up after each one.  So
    *         separate pools that can be cleared at thread exit are used. */
-  
+
   apr_pool_t *connection_pool = svn_pool_create(pool);
   *connection = apr_pcalloc(connection_pool, sizeof(**connection));
   (*connection)->pool = connection_pool;
   (*connection)->params = params;
   (*connection)->ref_count = 1;
-  
+
   do
     {
       #ifdef WIN32
       if (winservice_is_stopping())
         exit(0);
       #endif
-      
+
       status = apr_socket_accept(&(*connection)->usock, sock,
                                  connection_pool);
       if (handling_mode == connection_mode_fork)
         {
           apr_proc_t proc;
-          
+
           /* Collect any zombie child processes. */
           while (apr_proc_wait_all_procs(&proc, NULL, NULL, APR_NOWAIT,
             connection_pool) == APR_CHILD_DONE)
@@ -519,7 +519,7 @@ accept_connection(connection_t **connect
   while (APR_STATUS_IS_EINTR(status)
     || APR_STATUS_IS_ECONNABORTED(status)
     || APR_STATUS_IS_ECONNRESET(status));
-  
+
   return status
        ? svn_error_wrap_apr(status, _("Can't accept client connection"))
        : SVN_NO_ERROR;
@@ -611,7 +611,7 @@ static void * APR_THREAD_FUNC serve_thre
     close_connection(connection);
   else
     apr_thread_pool_push(threads, serve_thread, connection, 0, NULL);
-    
+
   return NULL;
 }
 
@@ -983,7 +983,7 @@ sub_main(int *exit_code, int argc, const
   svn_hash_sets(params.fs_config, SVN_FS_CONFIG_FSFS_CACHE_REVPROPS,
                 cache_revprops ? "2" :"0");
   svn_hash_sets(params.fs_config, SVN_FS_CONFIG_FSFS_BLOCK_READ,
-                use_block_read ? "1" :"0");  
+                use_block_read ? "1" :"0");
 
   SVN_ERR(svn_repos__config_pool_create(&params.config_pool,
                                         is_multi_threaded,
@@ -1001,7 +1001,7 @@ sub_main(int *exit_code, int argc, const
 
       SVN_ERR(svn_repos__config_pool_get(&params.cfg, NULL,
                                          params.config_pool,
-                                         config_filename, 
+                                         config_filename,
                                          TRUE, /* must_exist */
                                          FALSE, /* names_case_sensitive */
                                          NULL,

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/README
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/README?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/README (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/README Wed Feb 25 08:15:39 2015
@@ -180,8 +180,8 @@ or if you're running an individual test,
 
 $ ./basic_tests.py --url=svn://localhost --enable-sasl 3
 
-Note that to do this you'll have to have a subversion.conf file in your
-SASL lib dir (i.e. something like /usr/lib/sasl2/subversion.conf), it
+Note that to do this you'll have to have a svn.conf file in your
+SASL lib dir (i.e. something like /usr/lib/sasl2/svn.conf), it
 should contain something like:
 
 pwcheck_method: auxprop
@@ -195,6 +195,16 @@ $ saslpasswd2 -c -u svntest jconstant
 
 As usual, both users should use the password 'rayjandom'.
 
+To enable DUMP_LOAD_CROSS_CHECK to work a third user is required,
+
+$ saslpasswd2 -c -u svntest __dumpster__
+
+with password '__loadster__'.
+
+The user running the tests will need read access to the sasl database
+and on some systems this can be arranged by adding the user to the sasl
+group.
+
 There are 'make svnserveautocheck' and ./svnserveautocheck.sh commands,
 analogous to davautocheck.sh documented above.
 

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/basic_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/basic_tests.py?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/basic_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/basic_tests.py Wed Feb 25 08:15:39 2015
@@ -3083,32 +3083,6 @@ def peg_rev_on_non_existent_wc_path(sbox
                                      'cat', '-r2', sbox.ospath('mu3') + '@3')
 
 
-@Issue(4299)
-def basic_youngest(sbox):
-  'basic youngest'
-
-  sbox.build(read_only=True)
-
-  repos_url = sbox.repo_url
-  deep_repos_url = repos_url + '/A/D/G'
-
-  wc_dir = sbox.wc_dir
-  deep_wc_dir = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
-  bad_wc_dir = os.path.join(wc_dir, 'Z')
-
-  svntest.actions.run_and_verify_svn(None, svntest.verify.AnyOutput,
-                                     'youngest', bad_wc_dir)
-
-  for flag, output in [(False, "1\n"), (True, "1")]:
-    for path in [repos_url, deep_repos_url, wc_dir, deep_wc_dir]:
-      if flag:
-        svntest.actions.run_and_verify_svn([output], [],
-                                           'youngest', '--no-newline', path)
-      else:
-        svntest.actions.run_and_verify_svn([output], [],
-                                           'youngest', path)
-
-
 # With 'svn mkdir --parents' the target directory may already exist on disk.
 # In that case it was wrongly performing a recursive 'add' on its contents.
 def mkdir_parents_target_exists_on_disk(sbox):
@@ -3202,7 +3176,6 @@ test_list = [ None,
               rm_missing_with_case_clashing_ondisk_item,
               delete_conflicts_one_of_many,
               peg_rev_on_non_existent_wc_path,
-              basic_youngest,
               mkdir_parents_target_exists_on_disk,
              ]
 

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/blame_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/blame_tests.py?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/blame_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/blame_tests.py Wed Feb 25 08:15:39 2015
@@ -748,7 +748,7 @@ def blame_output_after_merge(sbox):
   # Next test with the -g option with -rN:M
   expected_output = [ "       -          - New version of file 'mu'.\n",
                       "       -          - 2nd line in file 'mu'.\n",
-                      "G      -          - new 3rd line in file 'mu'.\n",
+                      "G      5    jrandom new 3rd line in file 'mu'.\n",
                       "G      6    jrandom add 3.5 line in file 'mu'.\n",
                       "       -          - 4th line in file 'mu'.\n",
                       "       -          - 5th line in file 'mu'.\n",
@@ -950,23 +950,115 @@ def blame_youngest_to_oldest(sbox):
   orig_line = open(iota).read()
   line = "New contents for iota\n"
   svntest.main.file_append(iota, line)
-  sbox.simple_commit()
-  
+  sbox.simple_commit() #r2
+
   # Move the file, to check that the operation will peg correctly.
   iota_moved = sbox.ospath('iota_moved')
   sbox.simple_move('iota', 'iota_moved')
-  sbox.simple_commit()
-  
+  sbox.simple_commit() #r3
+
   # Delete a line.
   open(iota_moved, 'w').write(line)
-  sbox.simple_commit()
+  sbox.simple_commit() #r4
 
   expected_output = [
-        '     %d    jrandom %s\n' % (3, orig_line[:-1]),
+        '     %d    jrandom %s\n' % (4, orig_line[:-1]),
   ]
   svntest.actions.run_and_verify_svn(expected_output, [],
                                      'blame', '-r4:1', iota_moved)
 
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-rHEAD:1', iota_moved)
+
+  expected_output = [
+        '     %d    jrandom %s\n' % (2, line[:-1]),
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-r1:HEAD', iota_moved)
+
+@Issue(4467)
+def blame_reverse_no_change(sbox):
+  "blame reverse towards a revision with no change"
+
+  sbox.build()
+
+  # Introduce a revision where iota doesn't change!
+  sbox.simple_propset('a', 'b', 'A')
+  sbox.simple_commit('') #r2
+
+  sbox.simple_append('iota', 'new line\n')
+  sbox.simple_commit('') #r3
+
+  sbox.simple_append('iota', 'another new line\n')
+  sbox.simple_commit('') #r4
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+    '     3    jrandom new line\n',
+    '     4    jrandom another new line\n',
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-r2:HEAD', sbox.ospath('iota'))
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+  ]
+  # This used to trigger an assertion on 1.9.x before 1.9.0
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-rHEAD:2', sbox.ospath('iota'))
+
+  # Drop the middle line
+  sbox.simple_append('iota', 'This is the file \'iota\'.\n'
+                             'another new line\n', truncate=True)
+  sbox.simple_commit('') #r5
+
+  # Back to start
+  sbox.simple_append('iota', 'This is the file \'iota\'.\n', truncate=True)
+  sbox.simple_commit('') #r6
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-rHEAD:2', sbox.ospath('iota'))
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+    '     5    jrandom new line\n',
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-rHEAD:3', sbox.ospath('iota'))
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+    '     5    jrandom new line\n',
+    '     6    jrandom another new line\n',
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-rHEAD:4', sbox.ospath('iota'))
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+    '     6    jrandom another new line\n',
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-rHEAD:5', sbox.ospath('iota'))
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-rHEAD:6', sbox.ospath('iota'))
+
+
+  expected_output = [
+    '     -          - This is the file \'iota\'.\n',
+    '     5    jrandom new line\n',
+  ]
+  svntest.actions.run_and_verify_svn(expected_output, [],
+                                     'blame', '-r5:3', sbox.ospath('iota'))
+
+
 ########################################################################
 # Run the tests
 
@@ -991,6 +1083,7 @@ test_list = [ None,
               blame_multiple_targets,
               blame_eol_handling,
               blame_youngest_to_oldest,
+              blame_reverse_no_change,
              ]
 
 if __name__ == '__main__':

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/checkout_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/checkout_tests.py?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/checkout_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/checkout_tests.py Wed Feb 25 08:15:39 2015
@@ -707,7 +707,7 @@ def checkout_peg_rev_date(sbox):
                                           expected_output,
                                           expected_wc)
 
-  # now try another checkout with repo@r1_string 
+  # now try another checkout with repo@r1_string
   checkout_target = sbox.add_wc_path('checkout2')
   os.mkdir(checkout_target)
 
@@ -1160,9 +1160,9 @@ def checkout_wc_from_drive(sbox):
       'D/G/tau'   : Item(contents="This is the file 'tau'.\n"),
       'D/G/pi'    : Item(contents="This is the file 'pi'.\n"),
       'D/gamma'   : Item(contents="This is the file 'gamma'.\n"),
-      'mu'        : Item(contents="This is the file 'mu'.\n"),    
+      'mu'        : Item(contents="This is the file 'mu'.\n"),
     })
-    
+
     svntest.actions.run_and_verify_checkout(repo_url + '/A', wc2_dir,
                                             expected_output, expected_wc,
                                             None, None, None, None)
@@ -1187,7 +1187,7 @@ def checkout_wc_from_drive(sbox):
       'G/pi'    : Item(contents="This is the file 'pi'.\n"),
       'G/tau'   : Item(contents="This is the file 'tau'.\n"),
       'G/rho'   : Item(contents="This is the file 'rho'.\n"),
-      'gamma'   : Item(contents="This is the file 'gamma'.\n"),    
+      'gamma'   : Item(contents="This is the file 'gamma'.\n"),
     })
 
     svntest.actions.run_and_verify_checkout(repo_url + '/A/D', wc3_dir,

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/commit_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/commit_tests.py?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/commit_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/commit_tests.py Wed Feb 25 08:15:39 2015
@@ -2931,17 +2931,17 @@ def last_changed_of_copied_subdir(sbox):
 
 def commit_unversioned(sbox):
   "verify behavior on unversioned targets"
-  
+
   sbox.build(read_only=True)
   wc_dir = sbox.wc_dir
-  
+
   expected_err = 'E200009: .*existing.*\' is not under version control'
 
   # Unversioned, but existing file
-  svntest.main.file_write(sbox.ospath('existing'), "xxxx")  
+  svntest.main.file_write(sbox.ospath('existing'), "xxxx")
   svntest.actions.run_and_verify_commit(wc_dir, None, None, expected_err,
                                          sbox.ospath('existing'))
-  
+
   # Unversioned, not existing
   svntest.actions.run_and_verify_commit(wc_dir, None, None, expected_err,
                                          sbox.ospath('not-existing'))

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/copy_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/copy_tests.py?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/copy_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/copy_tests.py Wed Feb 25 08:15:39 2015
@@ -1005,8 +1005,7 @@ def repos_to_wc(sbox):
 
   expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
   expected_output.add({
-    'pi' : Item(status='A ',  wc_rev='0', entry_rev='1'),
-    # And from the foreign repository
+    'pi'            : Item(status='A ', wc_rev='0'),
     'E'             : Item(status='A ', wc_rev='0'),
     'E/beta'        : Item(status='A ', wc_rev='0'),
     'E/alpha'       : Item(status='A ', wc_rev='0'),
@@ -1762,7 +1761,34 @@ def mixed_wc_to_url(sbox):
                                      'mkdir', Y_path)
 
   # Now copy local A/D/G to create new directory A/D/Z the repository.
-  svntest.actions.run_and_verify_svn(None, [],
+
+  expected_status = svntest.wc.State(G_path, {
+    ''                  : Item(status='  ', wc_rev='1'),
+    'X'                 : Item(status='A ', copied='+', wc_rev='-'),
+    'X/F'               : Item(status='  ', copied='+', wc_rev='-'),
+    'X/E'               : Item(status='  ', copied='+', wc_rev='-'),
+    'X/E/alpha'         : Item(status='D ', copied='+', wc_rev='-'),
+    'X/E/beta'          : Item(status='  ', copied='+', wc_rev='-'),
+    'X/lambda'          : Item(status='  ', copied='+', wc_rev='-'),
+    'Y'                 : Item(status='A ', wc_rev='-'),
+    'rho'               : Item(status='M ', wc_rev='3'),
+    'tau'               : Item(status='  ', wc_rev='1'),
+  })
+
+  svntest.actions.run_and_verify_status(G_path, expected_status)
+
+  expected_output = svntest.verify.UnorderedOutput([
+      'Adding copy of        %s\n' % sbox.ospath('A/D/G'),
+      'Adding copy of        %s\n' % sbox.ospath('A/D/G/X'),
+      'Deleting copy of      %s\n' % sbox.ospath('A/D/G/X/E/alpha'),
+      'Adding copy of        %s\n' % sbox.ospath('A/D/G/Y'),
+      'Deleting copy of      %s\n' % sbox.ospath('A/D/G/pi'),
+      'Replacing copy of     %s\n' % sbox.ospath('A/D/G/rho'),
+      'Transmitting file data .done\n',
+      'Committing transaction...\n',
+      'Committed revision 4.\n',
+  ])
+  svntest.actions.run_and_verify_svn(expected_output, [],
                                      'cp', '-m', "Make a copy.",
                                      G_path, Z_url)
   expected_output = svntest.verify.UnorderedOutput([
@@ -5430,6 +5456,13 @@ def copy_and_move_conflicts(sbox):
                          'D/G/pi',
                          'D/G/rho',
                          'D/G/tau')
+  expected_status.tweak('B', moved_from='../A/B')
+  expected_status.tweak('D', moved_from='../A/D')
+  expected_status.tweak('H', moved_from='D/H')
+  expected_status.tweak('Q', moved_from='../A/Q')
+  expected_status.tweak('D/H', moved_to='H')
+  expected_status.tweak('alpha', moved_from='B/E/alpha')
+  expected_status.tweak('B/E/alpha', moved_to='alpha')
   svntest.actions.run_and_verify_status(wc('move-dest'), expected_status)
 
   expected_disk = svntest.wc.State('', {

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

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

Modified: subversion/branches/reuse-ra-session/subversion/tests/cmdline/depth_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/reuse-ra-session/subversion/tests/cmdline/depth_tests.py?rev=1662177&r1=1662176&r2=1662177&view=diff
==============================================================================
--- subversion/branches/reuse-ra-session/subversion/tests/cmdline/depth_tests.py (original)
+++ subversion/branches/reuse-ra-session/subversion/tests/cmdline/depth_tests.py Wed Feb 25 08:15:39 2015
@@ -1955,22 +1955,29 @@ def fold_tree_with_unversioned_modified_
   # Fold the A dir to empty, expect the modified & unversioned ones left
   # unversioned rather than removed, along with paths to those items.
 
-  # Even though the directory B and D is not deleted because of local
-  # modificatoin or unversioned items, there will be only one notification at
-  # B and D.
+  # Directories B and D won't be deleted, because that would remove their
+  # local modifications. Their unmodified descendants are deleted though.
   expected_output = svntest.wc.State(wc_dir, {
-    'A/B'            : Item(status='D '),
+    'A/B/E'          : Item(status='D '),
+    'A/B/F'          : Item(status='D '),
+    'A/B/lambda'     : Item(status='D '),
     'A/C'            : Item(status='D '),
-    'A/D'            : Item(status='D '),
-    'A/mu'           : Item(status='D '),
+    'A/D/G/rho'      : Item(status='D '),
+    'A/D/G/tau'      : Item(status='D '),
+    'A/D/H'          : Item(status='D '),
+    'A/D/gamma'      : Item(status='D '),
     })
   # unversioned items will be ignored in in the status tree, since the
   # run_and_verify_update() function uses a quiet version of svn status
-  # Dir A is still versioned, since the wc root is in depth-infinity
   expected_status = svntest.wc.State(wc_dir, {
     ''               : Item(status='  ', wc_rev=1),
     'iota'           : Item(status='  ', wc_rev=1),
-    'A'              : Item(status='  ', wc_rev=1)
+    'A'              : Item(status='  ', wc_rev=1),
+    'A/D'            : Item(status='  ', wc_rev='1'),
+    'A/D/G'          : Item(status='  ', wc_rev='1'),
+    'A/D/G/pi'       : Item(status='M ', wc_rev='1'),
+    'A/B'            : Item(status='  ', wc_rev='1'),
+    'A/mu'           : Item(status='M ', wc_rev='1'),
     })
   expected_disk = svntest.wc.State('', {
     'iota'           : Item(contents="This is the file 'iota'.\n"),
@@ -2886,6 +2893,82 @@ def spurious_nodes_row(sbox):
     # ra_neon added a spurious not-present row that does not show up in status
     raise svntest.Failure("count changed from '%s' to '%s'" % (val1, val2))
 
+def commit_excluded(sbox):
+  "commit an excluded node"
+
+  sbox.build()
+  wc_dir = sbox.wc_dir
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G' : Item(status='D '),
+  })
+  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+  expected_status.remove('A/D/G', 'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
+
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        None,
+                                        expected_status,
+                                        None, None, None, None, None, False,
+                                        "--set-depth=exclude",
+                                        sbox.ospath('A/D/G'))
+
+  sbox.simple_copy('A/D', 'D')
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'D' : Item(verb='Adding'),
+  })
+  
+  expected_status.add({
+    'D'          : Item(status='  ', wc_rev='2'),
+    'D/H'        : Item(status='  ', wc_rev='2'),
+    'D/H/chi'    : Item(status='  ', wc_rev='2'),
+    'D/H/psi'    : Item(status='  ', wc_rev='2'),
+    'D/H/omega'  : Item(status='  ', wc_rev='2'),
+    'D/gamma'    : Item(status='  ', wc_rev='2')
+  })
+
+  svntest.actions.run_and_verify_commit(wc_dir,
+                                        expected_output,
+                                        expected_status,
+                                        None, wc_dir)
+
+  expected_output = svntest.wc.State(wc_dir, {
+    'A/D/G'     : Item(status='A '),
+    'A/D/G/pi'  : Item(status='A '),
+    'A/D/G/tau' : Item(status='A '),
+    'A/D/G/rho' : Item(status='A '),
+    'D/G'       : Item(status='A '),
+    'D/G/pi'    : Item(status='A '),
+    'D/G/tau'   : Item(status='A '),
+    'D/G/rho'   : Item(status='A ')
+  })
+
+  expected_status.tweak(wc_rev=2)
+
+  expected_status.add({
+    'D'         : Item(status='  ', wc_rev='2'),
+    'D/G'       : Item(status='  ', wc_rev='2'),
+    'D/G/pi'    : Item(status='  ', wc_rev='2'),
+    'D/G/rho'   : Item(status='  ', wc_rev='2'),
+    'D/G/tau'   : Item(status='  ', wc_rev='2'),
+    'D/H'       : Item(status='  ', wc_rev='2'),
+    'D/H/chi'   : Item(status='  ', wc_rev='2'),
+    'D/H/psi'   : Item(status='  ', wc_rev='2'),
+    'D/H/omega' : Item(status='  ', wc_rev='2'),
+    'D/gamma'   : Item(status='  ', wc_rev='2'),
+    'A/D/G'     : Item(status='  ', wc_rev='2'),
+    'A/D/G/rho' : Item(status='  ', wc_rev='2'),
+    'A/D/G/tau' : Item(status='  ', wc_rev='2'),
+    'A/D/G/pi'  : Item(status='  ', wc_rev='2')
+  })
+
+  svntest.actions.run_and_verify_update(wc_dir,
+                                        expected_output,
+                                        None,
+                                        expected_status,
+                                        None, None, None, None, None, False,
+                                        "--set-depth=infinity", wc_dir)
 
 #----------------------------------------------------------------------
 # list all tests here, starting with None:
@@ -2937,6 +3020,7 @@ test_list = [ None,
               commit_then_immediates_update,
               revert_depth_files,
               spurious_nodes_row,
+              commit_excluded,
               ]
 
 if __name__ == "__main__":

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



Mime
View raw message