You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2013/05/24 00:04:35 UTC

svn commit: r1485869 [2/3] - in /subversion/branches/fsfs-format7: ./ contrib/hook-scripts/ subversion/bindings/javahl/src/org/apache/subversion/javahl/ subversion/include/ subversion/libsvn_client/ subversion/libsvn_delta/ subversion/libsvn_diff/ subv...

Modified: subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/protocol
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/protocol?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/protocol (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_ra_svn/protocol Thu May 23 22:04:33 2013
@@ -591,7 +591,13 @@ desirability:
   * The protocol version may be bumped.  Clients and servers can then
     choose to any range of protocol versions.
 
-4.1. Extending existing commands
+4.1. Limitations
+
+The current implementation limits the length of a word to 31 characters.
+Longer words, such as capability names, will be cause an error on the
+receiver side.
+
+4.2. Extending existing commands
 
 Extending an existing command is normally done by indicating that its
 tuple is allowed to end where it currently ends, for backwards

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/commit.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/commit.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/commit.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/commit.c Thu May 23 22:04:33 2013
@@ -1348,7 +1348,7 @@ svn_repos__get_commit_ev2(svn_editor_t *
   /* Can the user modify the repository at all?  */
   /* ### check against AUTHZ.  */
 
-  author = svn_hash_gets_fixed_key(revprops, SVN_PROP_REVISION_AUTHOR);
+  author = svn_hash_gets(revprops, SVN_PROP_REVISION_AUTHOR);
 
   eb = apr_palloc(result_pool, sizeof(*eb));
   eb->repos = repos;

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/delta.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/delta.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/delta.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/delta.c Thu May 23 22:04:33 2013
@@ -497,8 +497,7 @@ delta_proplists(struct context *c,
                                            pool));
 
           /* Transmit the committed-date. */
-          committed_date = svn_hash_gets_fixed_key(r_props,
-                                                   SVN_PROP_REVISION_DATE);
+          committed_date = svn_hash_gets(r_props, SVN_PROP_REVISION_DATE);
           if (committed_date || source_path)
             {
               SVN_ERR(change_fn(c, object, SVN_PROP_ENTRY_COMMITTED_DATE,
@@ -506,8 +505,7 @@ delta_proplists(struct context *c,
             }
 
           /* Transmit the last-author. */
-          last_author = svn_hash_gets_fixed_key(r_props,
-                                                SVN_PROP_REVISION_AUTHOR);
+          last_author = svn_hash_gets(r_props, SVN_PROP_REVISION_AUTHOR);
           if (last_author || source_path)
             {
               SVN_ERR(change_fn(c, object, SVN_PROP_ENTRY_LAST_AUTHOR,

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/deprecated.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/deprecated.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/deprecated.c Thu May 23 22:04:33 2013
@@ -57,11 +57,11 @@ svn_repos_get_commit_editor4(const svn_d
 {
   apr_hash_t *revprop_table = apr_hash_make(pool);
   if (user)
-    svn_hash_sets_fixed_key(revprop_table, SVN_PROP_REVISION_AUTHOR,
-                            svn_string_create(user, pool));
+    svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
+                  svn_string_create(user, pool));
   if (log_msg)
-    svn_hash_sets_fixed_key(revprop_table, SVN_PROP_REVISION_LOG,
-                            svn_string_create(log_msg, pool));
+    svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
+                  svn_string_create(log_msg, pool));
   return svn_repos_get_commit_editor5(editor, edit_baton, repos, txn,
                                       repos_url, base_path, revprop_table,
                                       commit_callback, commit_baton,

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/dump.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/dump.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/dump.c Thu May 23 22:04:33 2013
@@ -471,8 +471,8 @@ dump_node(struct edit_baton *eb,
          dumped. */
       if (!eb->verify && eb->notify_func && eb->oldest_dumped_rev > 1)
         {
-          svn_string_t *mergeinfo_str
-            = svn_hash_gets_fixed_key(prophash, SVN_PROP_MERGEINFO);
+          svn_string_t *mergeinfo_str = svn_hash_gets(prophash,
+                                                      SVN_PROP_MERGEINFO);
           if (mergeinfo_str)
             {
               svn_mergeinfo_t mergeinfo, old_mergeinfo;
@@ -1041,13 +1041,13 @@ write_revision_record(svn_stream_t *stre
   /* Run revision date properties through the time conversion to
      canonicalize them. */
   /* ### Remove this when it is no longer needed for sure. */
-  datevalue = svn_hash_gets_fixed_key(props, SVN_PROP_REVISION_DATE);
+  datevalue = svn_hash_gets(props, SVN_PROP_REVISION_DATE);
   if (datevalue)
     {
       SVN_ERR(svn_time_from_cstring(&timetemp, datevalue->data, pool));
       datevalue = svn_string_create(svn_time_to_cstring(timetemp, pool),
                                     pool);
-      svn_hash_sets_fixed_key(props, SVN_PROP_REVISION_DATE, datevalue);
+      svn_hash_sets(props, SVN_PROP_REVISION_DATE, datevalue);
     }
 
   encoded_prophash = svn_stringbuf_create_ensure(0, pool);

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/fs-wrap.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/fs-wrap.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/fs-wrap.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/fs-wrap.c Thu May 23 22:04:33 2013
@@ -115,9 +115,8 @@ svn_repos_fs_begin_txn_for_commit2(svn_f
 {
   apr_array_header_t *revprops;
   const char *txn_name;
+  svn_string_t *author = svn_hash_gets(revprop_table, SVN_PROP_REVISION_AUTHOR);
   apr_hash_t *hooks_env;
-  svn_string_t *author = svn_hash_gets_fixed_key(revprop_table,
-                                                 SVN_PROP_REVISION_AUTHOR);
 
   /* Parse the hooks-env file (if any). */
   SVN_ERR(svn_repos__parse_hooks_env(&hooks_env, repos->hooks_env_path,
@@ -154,11 +153,11 @@ svn_repos_fs_begin_txn_for_commit(svn_fs
 {
   apr_hash_t *revprop_table = apr_hash_make(pool);
   if (author)
-    svn_hash_sets_fixed_key(revprop_table, SVN_PROP_REVISION_AUTHOR,
-                            svn_string_create(author, pool));
+    svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
+                  svn_string_create(author, pool));
   if (log_msg)
-    svn_hash_sets_fixed_key(revprop_table, SVN_PROP_REVISION_LOG,
-                            svn_string_create(log_msg, pool));
+    svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
+                  svn_string_create(log_msg, pool));
   return svn_repos_fs_begin_txn_for_commit2(txn_p, repos, rev, revprop_table,
                                             pool);
 }
@@ -458,13 +457,13 @@ svn_repos_fs_revision_proplist(apr_hash_
 
       /* If they exist, we only copy svn:author and svn:date into the
          'real' hashtable being returned. */
-      value = svn_hash_gets_fixed_key(tmphash, SVN_PROP_REVISION_AUTHOR);
+      value = svn_hash_gets(tmphash, SVN_PROP_REVISION_AUTHOR);
       if (value)
-        svn_hash_sets_fixed_key(*table_p, SVN_PROP_REVISION_AUTHOR, value);
+        svn_hash_sets(*table_p, SVN_PROP_REVISION_AUTHOR, value);
 
-      value = svn_hash_gets_fixed_key(tmphash, SVN_PROP_REVISION_DATE);
+      value = svn_hash_gets(tmphash, SVN_PROP_REVISION_DATE);
       if (value)
-        svn_hash_sets_fixed_key(*table_p, SVN_PROP_REVISION_DATE, value);
+        svn_hash_sets(*table_p, SVN_PROP_REVISION_DATE, value);
     }
   else /* wholly readable revision */
     {

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/log.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/log.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/log.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/log.c Thu May 23 22:04:33 2013
@@ -1084,14 +1084,10 @@ fill_log_entry(svn_log_entry_t *log_entr
             {
               /* ... but we can only return author/date. */
               log_entry->revprops = svn_hash__make(pool);
-              svn_hash_sets_fixed_key(log_entry->revprops,
-                                      SVN_PROP_REVISION_AUTHOR,
-                            svn_hash_gets_fixed_key(r_props,
-                                                    SVN_PROP_REVISION_AUTHOR));
-              svn_hash_sets_fixed_key(log_entry->revprops,
-                                      SVN_PROP_REVISION_DATE,
-                            svn_hash_gets_fixed_key(r_props,
-                                                    SVN_PROP_REVISION_DATE));
+              svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_AUTHOR,
+                            svn_hash_gets(r_props, SVN_PROP_REVISION_AUTHOR));
+              svn_hash_sets(log_entry->revprops, SVN_PROP_REVISION_DATE,
+                            svn_hash_gets(r_props, SVN_PROP_REVISION_DATE));
             }
           else
             /* ... so return all we got. */

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/reporter.c Thu May 23 22:04:33 2013
@@ -487,10 +487,10 @@ get_revision_info(report_baton_t *b,
                                        scratch_pool));
 
       /* Extract the committed-date. */
-      cdate = svn_hash_gets_fixed_key(r_props, SVN_PROP_REVISION_DATE);
+      cdate = svn_hash_gets(r_props, SVN_PROP_REVISION_DATE);
 
       /* Extract the last-author. */
-      author = svn_hash_gets_fixed_key(r_props, SVN_PROP_REVISION_AUTHOR);
+      author = svn_hash_gets(r_props, SVN_PROP_REVISION_AUTHOR);
 
       /* Create a result object */
       info = apr_palloc(b->pool, sizeof(*info));

Modified: subversion/branches/fsfs-format7/subversion/libsvn_repos/rev_hunt.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_repos/rev_hunt.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_repos/rev_hunt.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_repos/rev_hunt.c Thu May 23 22:04:33 2013
@@ -171,8 +171,8 @@ svn_repos_get_committed_info(svn_revnum_
   SVN_ERR(svn_fs_revision_proplist(&revprops, fs, *committed_rev, pool));
 
   /* Extract date and author from these revprops. */
-  committed_date_s = svn_hash_gets_fixed_key(revprops, SVN_PROP_REVISION_DATE);
-  last_author_s = svn_hash_gets_fixed_key(revprops, SVN_PROP_REVISION_AUTHOR);
+  committed_date_s = svn_hash_gets(revprops, SVN_PROP_REVISION_DATE);
+  last_author_s = svn_hash_gets(revprops, SVN_PROP_REVISION_AUTHOR);
 
   *committed_date = committed_date_s ? committed_date_s->data : NULL;
   *last_author = last_author_s ? last_author_s->data : NULL;

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/adler32.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/adler32.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/adler32.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/adler32.c Thu May 23 22:04:33 2013
@@ -57,7 +57,7 @@ svn__adler32(apr_uint32_t checksum, cons
    */
   if (len >= 80)
     {
-      /* Larger buffers can be effiently handled by Marc Adler's
+      /* Larger buffers can be efficiently handled by Marc Adler's
        * optimized code. Also, new zlib versions will come with
        * SIMD code for x86 and x64.
        */
@@ -76,16 +76,16 @@ svn__adler32(apr_uint32_t checksum, cons
        * (approx. one clock tick per byte + 2 ticks loop overhead)
        */
       for (; len >= 8; len -= 8, input += 8)
-      {
-        s1 += input[0]; s2 += s1;
-        s1 += input[1]; s2 += s1;
-        s1 += input[2]; s2 += s1;
-        s1 += input[3]; s2 += s1;
-        s1 += input[4]; s2 += s1;
-        s1 += input[5]; s2 += s1;
-        s1 += input[6]; s2 += s1;
-        s1 += input[7]; s2 += s1;
-      }
+        {
+          s1 += input[0]; s2 += s1;
+          s1 += input[1]; s2 += s1;
+          s1 += input[2]; s2 += s1;
+          s1 += input[3]; s2 += s1;
+          s1 += input[4]; s2 += s1;
+          s1 += input[5]; s2 += s1;
+          s1 += input[6]; s2 += s1;
+          s1 += input[7]; s2 += s1;
+        }
 
       /* Adler-32 calculation as a simple two ticks per iteration loop.
        */

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/compat.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/compat.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/compat.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/compat.c Thu May 23 22:04:33 2013
@@ -76,9 +76,9 @@ svn_compat_log_revprops_clear(apr_hash_t
 {
   if (revprops)
     {
-      svn_hash_sets_fixed_key(revprops, SVN_PROP_REVISION_AUTHOR, NULL);
-      svn_hash_sets_fixed_key(revprops, SVN_PROP_REVISION_DATE, NULL);
-      svn_hash_sets_fixed_key(revprops, SVN_PROP_REVISION_LOG, NULL);
+      svn_hash_sets(revprops, SVN_PROP_REVISION_AUTHOR, NULL);
+      svn_hash_sets(revprops, SVN_PROP_REVISION_DATE, NULL);
+      svn_hash_sets(revprops, SVN_PROP_REVISION_LOG, NULL);
     }
 }
 
@@ -103,14 +103,11 @@ svn_compat_log_revprops_out(const char *
   *author = *date = *message = NULL;
   if (revprops)
     {
-      if ((author_s = svn_hash_gets_fixed_key(revprops,
-                                              SVN_PROP_REVISION_AUTHOR)))
+      if ((author_s = svn_hash_gets(revprops, SVN_PROP_REVISION_AUTHOR)))
         *author = author_s->data;
-      if ((date_s = svn_hash_gets_fixed_key(revprops,
-                                            SVN_PROP_REVISION_DATE)))
+      if ((date_s = svn_hash_gets(revprops, SVN_PROP_REVISION_DATE)))
         *date = date_s->data;
-      if ((message_s = svn_hash_gets_fixed_key(revprops,
-                                               SVN_PROP_REVISION_LOG)))
+      if ((message_s = svn_hash_gets(revprops, SVN_PROP_REVISION_LOG)))
         *message = message_s->data;
     }
 }

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/dirent_uri.c Thu May 23 22:04:33 2013
@@ -1688,7 +1688,8 @@ svn_dirent_is_canonical(const char *dire
 static svn_boolean_t
 relpath_is_canonical(const char *relpath)
 {
-  const char *ptr = relpath, *seg = relpath;
+  const char *ptr = relpath;
+  apr_size_t i, len;
 
   /* RELPATH is canonical if it has:
    *  - no '.' segments
@@ -1696,36 +1697,32 @@ relpath_is_canonical(const char *relpath
    *  - no '//'
    */
 
-  if (*relpath == '\0')
-    return TRUE;
-
+  /* invalid beginnings */
   if (*ptr == '/')
     return FALSE;
 
-  /* Now validate the rest of the path. */
-  while(1)
-    {
-      apr_size_t seglen = ptr - seg;
-
-      if (seglen == 1 && *seg == '.')
-        return FALSE;  /*  /./   */
-
-      if (*ptr == '/' && *(ptr+1) == '/')
-        return FALSE;  /*  //    */
-
-      if (! *ptr && *(ptr - 1) == '/')
-        return FALSE;  /* foo/  */
+  if (ptr[0] == '.' && (ptr[1] == '/' || ptr[1] == '\0'))
+    return FALSE;
 
-      if (! *ptr)
-        break;
+  /* valid special cases */
+  len = strlen(ptr);
+  if (len < 2)
+    return TRUE;
 
-      if (*ptr == '/')
-        ptr++;
-      seg = ptr;
+  /* invalid endings */
+  if (ptr[len-1] == '/' || (ptr[len-1] == '.' && ptr[len-2] == '/'))
+    return FALSE;
 
-      while (*ptr && (*ptr != '/'))
-        ptr++;
-    }
+  /* Now validate the rest of the path. */
+  for (i = 0; i < len - 1; ++i)
+    if (ptr[i] == '/' && ptr[i+1] <= '/') /* '.' and '/' have smaller UTF-8
+                                             codes than most other chars */
+      {
+        if (ptr[i+1] == '/')
+          return FALSE;  /*  //   */
+        if (ptr[i+1] == '.' && ptr[i+2] == '/')
+          return FALSE;  /*  /./  */
+      }
 
   return TRUE;
 }

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/eol.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/eol.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/eol.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/eol.c Thu May 23 22:04:33 2013
@@ -30,14 +30,12 @@
 #include "private/svn_eol_private.h"
 #include "private/svn_dep_compat.h"
 
-/* Machine-word-sized masks used in svn_eol__find_eol_start.
- */
 char *
 svn_eol__find_eol_start(char *buf, apr_size_t len)
 {
 #if !SVN_UNALIGNED_ACCESS_IS_OK
 
-  /* On some systems, we need to make sure that buf is properly aligned
+  /* On some systems, we need to make sure that BUF is properly aligned
    * for chunky data access. This overhead is still justified because
    * only lines tend to be tens of chars long.
    */
@@ -62,8 +60,8 @@ svn_eol__find_eol_start(char *buf, apr_s
     apr_uintptr_t r_test = chunk ^ SVN__R_MASK;
     apr_uintptr_t n_test = chunk ^ SVN__N_MASK;
 
-    /* A byte in SVN__R_TEST can by < 0x80, iff it has been \0 before
-     * (i.e. \r in *BUF). Dito for SVN__N_TEST. */
+    /* A byte in SVN__R_TEST can only be < 0x80, iff it has been \0 before
+     * (i.e. \r in *BUF). Ditto for SVN__N_TEST. */
     r_test |= (r_test & SVN__LOWER_7BITS_SET) + SVN__LOWER_7BITS_SET;
     n_test |= (n_test & SVN__LOWER_7BITS_SET) + SVN__LOWER_7BITS_SET;
 

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/io.c Thu May 23 22:04:33 2013
@@ -51,6 +51,10 @@
 #include <arch/win32/apr_arch_file_io.h>
 #endif
 
+#if APR_HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
 #include "svn_hash.h"
 #include "svn_types.h"
 #include "svn_dirent_uri.h"
@@ -2104,11 +2108,12 @@ svn_error_t *svn_io_file_flush_to_disk(a
 {
   apr_os_file_t filehand;
 
+  /* ### In apr 1.4+ we could delegate most of this function to
+         apr_file_sync(). The only major difference is that this doesn't
+         contain the retry loop for EINTR on linux. */
+
   /* First make sure that any user-space buffered data is flushed. */
-  SVN_ERR(do_io_file_wrapper_cleanup(file, apr_file_flush(file),
-                                     N_("Can't flush file '%s'"),
-                                     N_("Can't flush stream"),
-                                     pool));
+  SVN_ERR(svn_io_file_flush(file, pool));
 
   apr_os_file_get(&filehand, file);
 
@@ -2125,7 +2130,11 @@ svn_error_t *svn_io_file_flush_to_disk(a
       int rv;
 
       do {
+#ifdef F_FULLFSYNC
+        rv = fcntl(filehand, F_FULLFSYNC, 0);
+#else
         rv = fsync(filehand);
+#endif
       } while (rv == -1 && APR_STATUS_IS_EINTR(apr_get_os_error()));
 
       /* If the file is in a memory filesystem, fsync() may return
@@ -3512,6 +3521,16 @@ svn_io_file_write(apr_file_t *file, cons
      pool));
 }
 
+svn_error_t *
+svn_io_file_flush(apr_file_t *file,
+                  apr_pool_t *scratch_pool)
+{
+  return svn_error_trace(do_io_file_wrapper_cleanup(
+     file, apr_file_flush(file),
+     N_("Can't flush file '%s'"),
+     N_("Can't flush stream"),
+     scratch_pool));
+}
 
 svn_error_t *
 svn_io_file_write_full(apr_file_t *file, const void *buf,
@@ -3576,23 +3595,76 @@ svn_io_write_unique(const char **tmp_pat
 
   err = svn_io_file_write_full(new_file, buf, nbytes, NULL, pool);
 
-  /* ### BH: Windows doesn't have the race condition between the write and the
-     ###     rename that other operating systems might have. So allow windows
-     ###     to decide when it wants to perform the disk synchronization using
-     ###     the normal file locking and journaling filesystem rules.
-
-     ### Note that this function doesn't handle the rename, so we aren't even
-     ### sure that we really have to sync. */
-#ifndef WIN32
-  if (!err && nbytes > 0)
-    err = svn_io_file_flush_to_disk(new_file, pool);
-#endif
+  if (!err)
+    {
+      /* svn_io_file_flush_to_disk() can be very expensive, so use the
+         cheaper standard flush if the file is created as temporary file
+         anyway */
+      if (delete_when == svn_io_file_del_none)
+        err = svn_io_file_flush_to_disk(new_file, pool);
+      else
+        err = svn_io_file_flush(new_file, pool);
+    }
 
   return svn_error_trace(
                   svn_error_compose_create(err,
                                            svn_io_file_close(new_file, pool)));
 }
 
+svn_error_t *
+svn_io_write_atomic(const char *final_path,
+                    const void *buf,
+                    apr_size_t nbytes,
+                    const char *copy_perms_path,
+                    apr_pool_t *scratch_pool)
+{
+  apr_file_t *tmp_file;
+  const char *tmp_path;
+  svn_error_t *err;
+  const char *dirname = svn_dirent_dirname(final_path, scratch_pool);
+
+  SVN_ERR(svn_io_open_unique_file3(&tmp_file, &tmp_path, dirname,
+                                   svn_io_file_del_none,
+                                   scratch_pool, scratch_pool));
+
+  err = svn_io_file_write_full(tmp_file, buf, nbytes, NULL, scratch_pool);
+
+  if (!err)
+    err = svn_io_file_flush_to_disk(tmp_file, scratch_pool);
+
+  err = svn_error_compose_create(err,
+                                 svn_io_file_close(tmp_file, scratch_pool));
+
+  if (!err && copy_perms_path)
+    err = svn_io_copy_perms(copy_perms_path, tmp_path, scratch_pool);
+
+  if (err)
+    {
+      return svn_error_compose_create(err,
+                                      svn_io_remove_file2(tmp_path, FALSE,
+                                                          scratch_pool));
+    }
+
+  SVN_ERR(svn_io_file_rename(tmp_path, final_path, scratch_pool));
+
+#ifdef __linux__
+  {
+    /* Linux has the unusual feature that fsync() on a file is not
+       enough to ensure that a file's directory entries have been
+       flushed to disk; you have to fsync the directory as well.
+       On other operating systems, we'd only be asking for trouble
+       by trying to open and fsync a directory. */
+    apr_file_t *file;
+
+    SVN_ERR(svn_io_file_open(&file, dirname, APR_READ, APR_OS_DEFAULT,
+                             scratch_pool));
+    SVN_ERR(svn_io_file_flush_to_disk(file, scratch_pool));
+    SVN_ERR(svn_io_file_close(file, scratch_pool));
+  }
+#endif
+
+  return SVN_NO_ERROR;
+}
 
 svn_error_t *
 svn_io_file_trunc(apr_file_t *file, apr_off_t offset, apr_pool_t *pool)

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/prompt.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/prompt.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/prompt.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/prompt.c Thu May 23 22:04:33 2013
@@ -236,7 +236,6 @@ terminal_puts(const char *string, termin
               apr_pool_t *pool)
 {
   svn_error_t *err;
-  apr_status_t status;
   const char *converted;
 
   err = svn_cmdline_cstring_from_utf8(&converted, string, pool);
@@ -255,13 +254,10 @@ terminal_puts(const char *string, termin
     }
 #endif
 
-  status = apr_file_write_full(terminal->outfd, converted,
-                               strlen(converted), NULL);
-  if (!status)
-    status = apr_file_flush(terminal->outfd);
-  if (status)
-    return svn_error_wrap_apr(status, _("Can't write to terminal"));
-  return SVN_NO_ERROR;
+  SVN_ERR(svn_io_file_write_full(terminal->outfd, converted,
+                                 strlen(converted), NULL, pool));
+
+  return svn_error_trace(svn_io_file_flush(terminal->outfd, pool));
 }
 
 /* These codes can be returned from terminal_getc instead of a character. */

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_client_cert_providers.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_client_cert_providers.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_client_cert_providers.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_client_cert_providers.c Thu May 23 22:04:33 2013
@@ -79,13 +79,12 @@ ssl_client_cert_file_first_credentials(v
 }
 
 
-static const svn_auth_provider_t ssl_client_cert_file_provider =
-  {
-    SVN_AUTH_CRED_SSL_CLIENT_CERT,
-    ssl_client_cert_file_first_credentials,
-    NULL,
-    NULL
-  };
+static const svn_auth_provider_t ssl_client_cert_file_provider = {
+  SVN_AUTH_CRED_SSL_CLIENT_CERT,
+  ssl_client_cert_file_first_credentials,
+  NULL,
+  NULL
+};
 
 
 /*** Public API to SSL file providers. ***/

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_server_trust_providers.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_server_trust_providers.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_server_trust_providers.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/ssl_server_trust_providers.c Thu May 23 22:04:33 2013
@@ -149,9 +149,9 @@ ssl_server_trust_file_save_credentials(s
 
 static const svn_auth_provider_t ssl_server_trust_file_provider = {
   SVN_AUTH_CRED_SSL_SERVER_TRUST,
-  &ssl_server_trust_file_first_credentials,
+  ssl_server_trust_file_first_credentials,
   NULL,
-  &ssl_server_trust_file_save_credentials,
+  ssl_server_trust_file_save_credentials,
 };
 
 

Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/subst.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/subst.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/subst.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/subst.c Thu May 23 22:04:33 2013
@@ -50,6 +50,7 @@
 #include "svn_private_config.h"
 
 #include "private/svn_string_private.h"
+#include "private/svn_eol_private.h"
 
 /**
  * The textual elements of a detranslated special file.  One of these
@@ -1116,28 +1117,39 @@ translate_chunk(svn_stream_t *dst,
               /* skip current EOL */
               len += b->eol_str_len;
 
-              /* Check 4 bytes at once to allow for efficient pipelining
-                 and to reduce loop condition overhead. */
-              while ((p + len + 4) <= end)
+              if (b->keywords)
                 {
-                  if (interesting[(unsigned char)p[len]]
-                      || interesting[(unsigned char)p[len+1]]
-                      || interesting[(unsigned char)p[len+2]]
-                      || interesting[(unsigned char)p[len+3]])
-                    break;
-
-                  len += 4;
+                  /* Check 4 bytes at once to allow for efficient pipelining
+                    and to reduce loop condition overhead. */
+                  while ((p + len + 4) <= end)
+                    {
+                      if (interesting[(unsigned char)p[len]]
+                          || interesting[(unsigned char)p[len+1]]
+                          || interesting[(unsigned char)p[len+2]]
+                          || interesting[(unsigned char)p[len+3]])
+                        break;
+
+                      len += 4;
+                    }
+
+                  /* Found an interesting char or EOF in the next 4 bytes.
+                     Find its exact position. */
+                  while ((p + len) < end
+                         && !interesting[(unsigned char)p[len]])
+                    ++len;
+                }
+              else
+                {
+                  /* use our optimized sub-routine to find the next EOL */
+                  const char *eol
+                    = svn_eol__find_eol_start((char *)p + len, end - p);
+                  len += (eol ? eol : end) - (p + len);
                 }
-
-               /* Found an interesting char or EOF in the next 4 bytes.
-                  Find its exact position. */
-               while ((p + len) < end && !interesting[(unsigned char)p[len]])
-                 ++len;
             }
           while (b->nl_translation_skippable ==
                    svn_tristate_true &&       /* can potentially skip EOLs */
                  p + len + 2 < end &&         /* not too close to EOF */
-                 eol_unchanged (b, p + len)); /* EOL format already ok */
+                 eol_unchanged(b, p + len));  /* EOL format already ok */
 
           while ((p + len) < end && !interesting[(unsigned char)p[len]])
             len++;

Modified: subversion/branches/fsfs-format7/subversion/libsvn_wc/status.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_wc/status.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_wc/status.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_wc/status.c Thu May 23 22:04:33 2013
@@ -995,12 +995,12 @@ collect_ignore_patterns(apr_array_header
     {
       const svn_string_t *value;
 
-      value = svn_hash_gets_fixed_key(props, SVN_PROP_IGNORE);
+      value = svn_hash_gets(props, SVN_PROP_IGNORE);
       if (value)
         svn_cstring_split_append(*patterns, value->data, "\n\r", FALSE,
                                  result_pool);
 
-      value = svn_hash_gets_fixed_key(props, SVN_PROP_INHERITABLE_IGNORES);
+      value = svn_hash_gets(props, SVN_PROP_INHERITABLE_IGNORES);
       if (value)
         svn_cstring_split_append(*patterns, value->data, "\n\r", FALSE,
                                  result_pool);

Modified: subversion/branches/fsfs-format7/subversion/libsvn_wc/workqueue.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_wc/workqueue.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_wc/workqueue.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_wc/workqueue.c Thu May 23 22:04:33 2013
@@ -394,8 +394,6 @@ run_postupgrade(work_item_baton_t *wqb,
   const char *entries_path;
   const char *format_path;
   const char *wcroot_abspath;
-  const char *adm_path;
-  const char *temp_path;
   svn_error_t *err;
 
   err = svn_wc__wipe_postupgrade(wri_abspath, FALSE,
@@ -409,7 +407,6 @@ run_postupgrade(work_item_baton_t *wqb,
   SVN_ERR(svn_wc__db_get_wcroot(&wcroot_abspath, db, wri_abspath,
                                 scratch_pool, scratch_pool));
 
-  adm_path = svn_wc__adm_child(wcroot_abspath, NULL, scratch_pool);
   entries_path = svn_wc__adm_child(wcroot_abspath, SVN_WC__ADM_ENTRIES,
                                    scratch_pool);
   format_path = svn_wc__adm_child(wcroot_abspath, SVN_WC__ADM_FORMAT,
@@ -420,15 +417,13 @@ run_postupgrade(work_item_baton_t *wqb,
      ### The order may matter for some sufficiently old clients.. but
      ### this code only runs during upgrade after the files had been
      ### removed earlier during the upgrade. */
-  SVN_ERR(svn_io_write_unique(&temp_path, adm_path, SVN_WC__NON_ENTRIES_STRING,
+  SVN_ERR(svn_io_write_atomic(format_path, SVN_WC__NON_ENTRIES_STRING,
                               sizeof(SVN_WC__NON_ENTRIES_STRING) - 1,
-                              svn_io_file_del_none, scratch_pool));
-  SVN_ERR(svn_io_file_rename(temp_path, format_path, scratch_pool));
+                              NULL, scratch_pool));
 
-  SVN_ERR(svn_io_write_unique(&temp_path, adm_path, SVN_WC__NON_ENTRIES_STRING,
+  SVN_ERR(svn_io_write_atomic(entries_path, SVN_WC__NON_ENTRIES_STRING,
                               sizeof(SVN_WC__NON_ENTRIES_STRING) - 1,
-                              svn_io_file_del_none, scratch_pool));
-  SVN_ERR(svn_io_file_rename(temp_path, entries_path, scratch_pool));
+                              NULL, scratch_pool));
 
   return SVN_NO_ERROR;
 }

Modified: subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c (original)
+++ subversion/branches/fsfs-format7/subversion/mod_dav_svn/activity.c Thu May 23 22:04:33 2013
@@ -209,11 +209,9 @@ dav_svn__store_activity(const dav_svn_re
   activity_contents = apr_psprintf(repos->pool, "%s\n%s\n",
                                    txn_name, activity_id);
 
-  /* ### is there another directory we already have and can write to? */
-  err = svn_io_write_unique(&tmp_path,
-                            svn_dirent_dirname(final_path, repos->pool),
+  err = svn_io_write_atomic(final_path,
                             activity_contents, strlen(activity_contents),
-                            svn_io_file_del_none, repos->pool);
+                            NULL /* copy_perms path */, repos->pool);
   if (err)
     {
       svn_error_t *serr = svn_error_quick_wrap(err,
@@ -225,15 +223,6 @@ dav_svn__store_activity(const dav_svn_re
                                   repos->pool);
     }
 
-  err = svn_io_file_rename(tmp_path, final_path, repos->pool);
-  if (err)
-    {
-      svn_error_clear(svn_io_remove_file2(tmp_path, TRUE, repos->pool));
-      return dav_svn__convert_err(err, HTTP_INTERNAL_SERVER_ERROR,
-                                  "could not replace files.",
-                                  repos->pool);
-    }
-
   return NULL;
 }
 
@@ -255,9 +244,9 @@ dav_svn__create_txn(const dav_svn_repos 
 
   if (repos->username)
     {
-      svn_hash_sets_fixed_key(revprops,
-                              SVN_PROP_REVISION_AUTHOR,
-                              svn_string_create(repos->username, pool));
+      svn_hash_sets(revprops,
+                    SVN_PROP_REVISION_AUTHOR,
+                    svn_string_create(repos->username, pool));
     }
 
   serr = svn_fs_youngest_rev(&rev, repos->fs, pool);

Modified: subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c (original)
+++ subversion/branches/fsfs-format7/subversion/mod_dav_svn/lock.c Thu May 23 22:04:33 2013
@@ -680,10 +680,9 @@ append_locks(dav_lockdb *lockdb,
       svn_fs_root_t *txn_root;
       const char *conflict_msg;
       apr_hash_t *revprop_table = apr_hash_make(resource->pool);
-      svn_hash_sets_fixed_key(revprop_table,
-                              SVN_PROP_REVISION_AUTHOR,
-                              svn_string_create(repos->username,
-                                                resource->pool));
+      svn_hash_sets(revprop_table,
+                    SVN_PROP_REVISION_AUTHOR,
+                    svn_string_create(repos->username, resource->pool));
 
       if (resource->info->repos->is_svn_client)
         return dav_svn__new_error(resource->pool, HTTP_METHOD_NOT_ALLOWED,

Modified: subversion/branches/fsfs-format7/subversion/po/sv.po
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/po/sv.po?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/po/sv.po [UTF-8] (original)
+++ subversion/branches/fsfs-format7/subversion/po/sv.po [UTF-8] Thu May 23 22:04:33 2013
@@ -219,7 +219,7 @@ msgstr "Felaktigt datum"
 
 #: ../include/svn_error_codes.h:180
 msgid "Bogus mime-type"
-msgstr "Felaktig mime-typ"
+msgstr "Felaktig MIME-typ"
 
 #: ../include/svn_error_codes.h:190
 msgid "Wrong or unexpected property value"
@@ -7456,7 +7456,7 @@ msgstr "Kan inte sätta \"%s\" på en fi
 #: ../libsvn_wc/props.c:1629
 #, c-format
 msgid "Can't set '%s': file '%s' has binary mime type property"
-msgstr "Kan inte sätta \"%s\": filen \"%s\" har binär mime-typsegenskap"
+msgstr "Kan inte sätta \"%s\": filen \"%s\" har binär MIME-typsegenskap"
 
 #: ../libsvn_wc/props.c:1674
 msgid "Failed to load current properties"
@@ -9968,7 +9968,8 @@ msgstr ""
 "                             (ARG1:ARG2))\n"
 "                             Ett revisionsargument kan vara något av:\n"
 "                                TAL          revisionsnummer\n"
-"                                \"{\"DATUM\"}\"  revision vid början av angiven dag\n"
+"                                \"{\" DATUM \"}\" revision vid början av\n"
+"                                             angiven dag\n"
 "                                \"HEAD\"       senaste revisionen i arkivet\n"
 "                                \"BASE\"       basrevisionen för objektets\n"
 "                                             arbetskopia\n"
@@ -10030,7 +10031,7 @@ msgstr ""
 "                             \"blame\".\n"
 "                             Skönsvärde: \"-u\". Väljare separeras av tomrum.\n"
 "                             För inbyggda \"diff\" och \"blame\" tillåts:\n"
-"                               -u, --unified: Visa tre rader av sammanhang\n"
+"                               -u, --unified: Visa tre rader sammanhang\n"
 "                               -b, --ignore-space-change:\n"
 "                                  Bortse från ändringar av mängden tomrum\n"
 "                               -w, --ignore-all-space:\n"
@@ -10083,7 +10084,7 @@ msgstr ""
 
 #: ../svn/svn.c:226 ../svnrdump/svnrdump.c:140 ../svnsync/svnsync.c:187
 msgid "do not cache authentication tokens"
-msgstr "cacha inte autentiseringsinformation"
+msgstr "spara inte autentiseringsinformation"
 
 #: ../svn/svn.c:228 ../svnrdump/svnrdump.c:154 ../svnsync/svnsync.c:197
 msgid ""
@@ -10243,7 +10244,7 @@ msgid ""
 "                             history"
 msgstr ""
 "använd/visa ytterligare information från\n"
-"                             sammanslagningshistorien"
+"                             sammanslagningshistoriken"
 
 #: ../svn/svn.c:298
 msgid ""
@@ -10406,7 +10407,7 @@ msgstr ""
 
 #: ../svn/svn.c:434
 msgid "add intermediate parents"
-msgstr "skapa mellanliggande förälderkataloger"
+msgstr "skapa mellanliggande föräldrakataloger"
 
 #: ../svn/svn.c:437
 msgid ""
@@ -10586,7 +10587,7 @@ msgstr ""
 "     nästa arkivering. Filer och kataloger som aldrig arkiverats tas\n"
 "     genast bort från arbetskopian såvida inte flaggan --keep-local anges.\n"
 "     Sökvägar som är, eller innehåller, objekt som ej är versionshanterade\n"
-"     eller som är ändrade raderas inte utan att flaggorna --force eller\n"
+"     eller som är ändrade raderas bara om flaggan --force eller\n"
 "     --keep-local används.\n"
 "\n"
 "  2. Varje objekt som anges med en URL raderas från arkivet genom en\n"
@@ -10913,7 +10914,7 @@ msgstr ""
 "  1. Visa loggmeddelanden för URL:en som motsvarar SÖKVÄG (\".\" om ej\n"
 "     angiven). Om REV anges avgör den var SÖKVÄG letas upp, och standard-\n"
 "     värdet för revisionsområdet är då REV:1. Annars är standardvärdet\n"
-"     för revisionsområdet är BASE:1 då URL:en kanske inte finns i\n"
+"     för revisionsområdet BASE:1 då URL:en kanske inte finns i\n"
 "     HEAD-revisionen.\n"
 "\n"
 "  2. Visa loggmeddelanden för varje SÖKVÄG (\".\" om ingen angiven) under\n"
@@ -10941,7 +10942,7 @@ msgstr ""
 "      *      matchar en följd av godtyckliga tecken\n"
 "      [abc]  matchar något av tecknen inom hakparenteserna\n"
 "  Om flera \"--search\"-flaggor anges kommer ett loggmeddelande visas om\n"
-"  något det matchar något av sökmönstren. Om flaggan --search-and anges,\n"
+"  det matchar något av sökmönstren. Om flaggan --search-and anges,\n"
 "  så kombineras den flaggans argument med mönstret från föregående --search\n"
 "  eller --search-and, och ett loggmeddelande visas bara om det matchar det\n"
 "  kombinerade sökmönstret.\n"
@@ -10950,7 +10951,7 @@ msgstr ""
 "\n"
 "  Exempel:\n"
 "\n"
-"    Visa de senaste 5 loggmeddelanden för den aktuella arbetskopians\n"
+"    Visa de 5 senaste loggmeddelandena för den aktuella arbetskopians\n"
 "    katalog och visa sökvägar ändrade i varje arkivering:\n"
 "      svn log -l 5 -v\n"
 "\n"
@@ -11412,7 +11413,7 @@ msgstr ""
 "\n"
 "     Sammanslagningen är nu bara gjord i din egna arbetskopia och behöver\n"
 "     fortfarande arkiveras så att andra kan se den. Du kan granska\n"
-"     ändringarna och kan behöva lösa konflikter innan det sammanslagningen\n"
+"     ändringarna och kan behöva lösa konflikter innan sammanslagningen\n"
 "     arkiveras.\n"
 "\n"
 "       - Exempel på återförening -\n"
@@ -11439,8 +11440,8 @@ msgstr ""
 "         svn merge ^/funktion\n"
 "\n"
 "     För att förhindra onödiga konflikter kräver en återförening att\n"
-"     AKSÖKVÄGSMÅL inte är en arbetskopia med blandad revision, utan lokala\n"
-"     ändringar, och utan växlade delträd.\n"
+"     AKSÖKVÄGSMÅL inte är en arbetskopia med blandad revision och saknar\n"
+"     lokala ändringar och växlade delträd.\n"
 "\n"
 "     En återförening kräver också att källgrenen har genomgående\n"
 "     synkroniserats med målet -- i exemplet ovan innebär det att alla\n"
@@ -11546,7 +11547,7 @@ msgstr ""
 "\n"
 "     Två funktioner har utvecklats på skilda grenar, \"apelsin\" och\n"
 "     \"banan\". Det står nu klart att \"banan\" borde kombineras med grenen\n"
-"     \"apelsin\" för vidare utveckling innan återförening.\n"
+"     \"apelsin\" för vidare utveckling före återförening.\n"
 "\n"
 "     Grenen \"banan\" har synkroniserats med \"trunk\" upp till revision\n"
 "     500. (Om revisionsnumret inte är känt kan det hittas med hjälp av\n"
@@ -11617,7 +11618,7 @@ msgstr ""
 "    - Sammanslagningsföljning -\n"
 "\n"
 "  Subversion använder egenskapen svn:mergeinfo för att följa samman-\n"
-"  slagningshistorien. Denna egenskap läses i början av sammanslagningen\n"
+"  slagningshistoriken. Denna egenskap läses i början av sammanslagningen\n"
 "  för att avgöra vad som skall ingå, och uppdateras vid sammanslagningens\n"
 "  fullbordan med de införda ändringarna. Sammanslagningsinformationen\n"
 "  används bara om de två källorna befinner sig på samma historiska linje:\n"
@@ -11673,7 +11674,7 @@ msgstr ""
 "användning: 1. mergeinfo KÄLLA[@REV] [MÅL[@REV]]\n"
 "            2. mergeinfo --show-revs=VILKA KÄLLA[@REV] [MÅL[@REV]]\n"
 "\n"
-"  1. Sammanfatta sammanslagningshistorien mellan KÄLLA och MÅL. Diagrammet\n"
+"  1. Sammanfatta sammanslagningshistoriken mellan KÄLLA och MÅL. Diagrammet\n"
 "     visar, från vänster till höger:\n"
 "       grenarnas yngsta gemensamma ursprung;\n"
 "       den senaste fulla sammanslagningen i endera riktningen, och alltså\n"
@@ -11849,7 +11850,7 @@ msgstr ""
 "    G  Sammanslagen (med lokala ändringar som inte har arkiverats)\n"
 "\n"
 "  För ändringar som inte anbragdes exakt rapporteras detta på rader som\n"
-"  med tecknet \">\". Sådana ändringar bör granskas noga.\n"
+"  börjar med tecknet \">\". Sådana ändringar bör granskas noga.\n"
 "\n"
 "  Om allt innehåll tas bort från en fil, så kommer den filen schemaläggas\n"
 "  för radering. Om en ny fil skapas så kommer den schemaläggas att läggas\n"
@@ -11861,7 +11862,7 @@ msgstr ""
 "  \"--- katalog/fil.txt  (revision N)\"). För att undvika avslag,\n"
 "  uppdatera först till revision N med hjälp av \"svn update -R N\",\n"
 "  anbringa ändringsfilen, och uppdatera sedan tillbaka till revisionen\n"
-"  HEAD. På så kan kommer konflikter lösas interaktivt.\n"
+"  HEAD. På så sätt kan konflikter lösas interaktivt.\n"
 
 #: ../svn/svn.c:1201
 msgid ""
@@ -12113,9 +12114,9 @@ msgstr ""
 "    svn:executable - Om den finns, görs filen exekverbar. Använd\n"
 "      \"svn propdel svn:executable SÖKVÄG...\" för att nollställa.\n"
 "    svn:eol-style  - Något av \"native\", \"CR\", \"LF\" eller \"CRLF\".\n"
-"    svn:mime-type  - Filens mime-typ. Används för att avgöra hur samman-\n"
+"    svn:mime-type  - Filens MIME-typ. Används för att avgöra hur samman-\n"
 "      slagningar av ändringar sker och hur den skickas från Apache. En\n"
-"      mime-typ som inleds med \"text/\" eller som saknas behandlas som text.\n"
+"      MIME-typ som inleds med \"text/\" eller som saknas behandlas som text.\n"
 "      Allt annat behandlas som binärdata.\n"
 "    svn:needs-lock - Om den är satt, visar den att filen bör låsas innan\n"
 "        den ändras. Gör att arbetsfilen blir skrivskyddad när den inte är\n"
@@ -12183,7 +12184,7 @@ msgstr ""
 "\n"
 "  Skriv om arbetskopians URL-metadata för att avspegla en ren syntaxändring.\n"
 "  Detta används när en arkivrots-URL ändras (t.ex. byte av schema eller\n"
-"  värddator) men arbetskopian fortfarande representerar samma katalog i\n"
+"  värddator) men arbetskopian representerar fortfarande samma katalog i\n"
 "  samma arkiv.\n"
 "\n"
 "  1. FRÅN-PREFIX och TILL-PREFIX är förled till arbetskopians aktuella\n"
@@ -12414,8 +12415,8 @@ msgstr ""
 "    Sjunde kolumnen: Huruvida objektet är föremål för en trädkonflikt\n"
 "      \" \" normalt\n"
 "      \"C\" trädkonflikt\n"
-"    Om objektet är föremål för en trädkonflikt kommer en extra rad skrivas\n"
-"    efter objektets statusrad om vad konflikten rör sig om.\n"
+"    Om objektet är föremål för en trädkonflikt kommer en extra rad om\n"
+"    konflikten skrivas efter objektets statusrad.\n"
 "\n"
 "  Information om uppdateringar på servern visas i den nionde kolumnen\n"
 "  (om -u angivits):\n"
@@ -12509,7 +12510,7 @@ msgstr ""
 "\n"
 "  1. Uppdatera arbetskopian så att den återspeglar en ny URL i arkivet.\n"
 "     Detta liknar hur \"svn update\" beter sig och är det sätt på vilket\n"
-"     man flyttar en arbetskopia till en gren eller märke inom ett\n"
+"     man flyttar en arbetskopia till en gren eller ett märke inom ett\n"
 "     och samma arkiv. Om FIXREV anges bestämmer den i vilken revision som\n"
 "     målet ursprunglingen slås upp.\n"
 "\n"
@@ -12528,7 +12529,7 @@ msgstr ""
 "     målet för denna handling.\n"
 "\n"
 "     Normalt vägrar Subversion att växla en sökväg i en arbetskopia till\n"
-"     en ny URL utan gemensam ursprung i versionshanteringen. Använd\n"
+"     en ny URL utan gemensamt ursprung i versionshanteringen. Använd\n"
 "     flaggan \"--ignore-ancestry\" för att kringgå denna kontroll.\n"
 "\n"
 "  2. Flaggan \"--relocate\" är föråldrad. Denna syntax motsvaras nu av\n"
@@ -13003,7 +13004,7 @@ msgstr "Källa och mål saknar gemensamt
 #: ../svn/util.c:1091
 #, c-format
 msgid "svn: warning: '%s' is a binary mime-type but file '%s' looks like text; diff, merge, blame, and other operations will stop working on this file\n"
-msgstr "svn: varning: \"%s\" är en binär mime-typ men filen \"%s\" ser ut som text; \"diff\", \"merge\", \"blame\" och andra kommandon kommer sluta fungera med denna fil\n"
+msgstr "svn: varning: \"%s\" är en binär MIME-typ men filen \"%s\" ser ut som text; \"diff\", \"merge\", \"blame\" och andra kommandon kommer sluta fungera med denna fil\n"
 
 #: ../svnadmin/svnadmin.c:218 ../svnrdump/svnrdump.c:120
 msgid "specify revision number ARG (or X:Y range)"
@@ -13193,7 +13194,7 @@ msgstr ""
 "\"dumpfile\"-format med återkoppling till standard fel. Revisionerna BÖRJAN\n"
 "till och med SLUT skrivs ut. Om inga revisioner anges, skrivs samtliga\n"
 "revisionsträd. Om endast BÖRJAN anges, skrivs det revisionsträdet. Flaggan\n"
-"--incremental gör att den första skrivna revisionen bara kommer innehålla\n"
+"--incremental gör att den först skrivna revisionen bara kommer innehålla\n"
 "sökvägarna som ändrades i den revisionen; annars kommer den innehålla alla\n"
 "sökvägar som finns i arkivet i den revisionen. (I båda fallen kommer alla\n"
 "revisioner därefter bara ta med sökvägarna som ändrades i varje enskild\n"
@@ -14123,7 +14124,7 @@ msgstr ""
 "                                 ändringar av mängden tomrum\n"
 "                               -w, --ignore-all-space: Bortse från allt tomrum\n"
 "                               --ignore-eol-style: Bortse från ändringar av\n"
-"                                 radbrytningstecken\n"
+"                                 radslutstecken\n"
 "                               -p, --show-c-function: Visa funktionsnamn i C"
 
 #: ../svnlook/svnlook.c:190 ../svnrdump/svnrdump.c:122
@@ -14288,7 +14289,7 @@ msgstr ""
 "                                  2. svnlook proplist --revprop ARKIVSÖKVÄG\n"
 "\n"
 "Lista egenskaperna för en sökväg i arkivet eller, om --revprop anges,\n"
-"visa revisionsegenskaper.  -v visar även egenskapernas värden.\n"
+"visa revisionsegenskaper. Med -v visas även egenskapernas värden.\n"
 
 #: ../svnlook/svnlook.c:287
 msgid ""
@@ -14592,7 +14593,7 @@ msgstr ""
 "                           använd \"-\" för att läsa från standard in)\n"
 "  --config-dir ARG       : använd ARG för att ange inställningskatalogen\n"
 "  --config-option ARG    : använd ARG för att ange en inställning\n"
-"  --no-auth-cache        : cacha inte autentiseringsinformation\n"
+"  --no-auth-cache        : spara inte autentiseringsinformation\n"
 "  --version              : visa versionsinformation\n"
 
 #: ../svnmucc/svnmucc.c:1002
@@ -14824,7 +14825,7 @@ msgid ""
 "                             [used for FSFS repositories only]"
 msgstr ""
 "storlek på extra cacheminne i MB som används\n"
-"                             för att reducera onödiga operation.\n"
+"                             för att reducera onödiga operationer.\n"
 "                             Standardvärdet är 128 för trådläge och 16 för\n"
 "                             icke-trådat läge.\n"
 "                             [endast använt för FSFS-arkiv]"
@@ -15258,7 +15259,7 @@ msgid ""
 "                             instance of svnsync is running concurrently."
 msgstr ""
 "Stäng av inbyggd låsning. Användning av denna\n"
-"                             flagga kan förstöra arkivspegeln om inte är\n"
+"                             flagga kan förstöra arkivspegeln om det inte är\n"
 "                             säkert att ingen annan körning av svnsync sker\n"
 "                             samtidigt."
 
@@ -15479,7 +15480,7 @@ msgstr ""
 "    4168M         arbetskopia med ändringar\n"
 "    4123S         växlad arbetskopia\n"
 "    4123P         partiell arbetskopia från en gles utcheckning\n"
-"    123:4168MS    växlad arbetskopia med blandade revisioner och ändringar\n"
+"    4123:4168MS   växlad arbetskopia med blandade revisioner och ändringar\n"
 "\n"
 "  Om AK_SÖKVÄG inte är versionshanterad så kommer programmet skriva ut\n"
 "  \"Ej versionshanterad fil/katalog\". Om AK_SÖKVÄG är en tillagd, kopierad\n"

Modified: subversion/branches/fsfs-format7/subversion/svn/conflict-callbacks.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svn/conflict-callbacks.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svn/conflict-callbacks.c (original)
+++ subversion/branches/fsfs-format7/subversion/svn/conflict-callbacks.c Thu May 23 22:04:33 2013
@@ -379,7 +379,7 @@ edit_prop_conflict(const char **merged_f
                                          scratch_pool);
   SVN_ERR(merge_prop_conflict(merged_prop, desc, NULL, scratch_pool));
   SVN_ERR(svn_stream_close(merged_prop));
-  SVN_ERR(svn_io_file_flush_to_disk(file, scratch_pool));
+  SVN_ERR(svn_io_file_flush(file, scratch_pool));
   SVN_ERR(open_editor(&performed_edit, file_path, b, scratch_pool));
   *merged_file_path = (performed_edit ? file_path : NULL);
 

Modified: subversion/branches/fsfs-format7/subversion/svn/file-merge.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svn/file-merge.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svn/file-merge.c (original)
+++ subversion/branches/fsfs-format7/subversion/svn/file-merge.c Thu May 23 22:04:33 2013
@@ -490,7 +490,7 @@ edit_chunk(apr_array_header_t **merged_c
         return svn_error_create(SVN_ERR_IO_WRITE_ERROR, NULL,
                                 _("Could not write data to temporary file"));
     }
-  SVN_ERR(svn_io_file_flush_to_disk(temp_file, scratch_pool));
+  SVN_ERR(svn_io_file_flush(temp_file, scratch_pool));
 
   err = svn_cmdline__edit_file_externally(temp_file_name, editor_cmd,
                                           config, scratch_pool);

Modified: subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c Thu May 23 22:04:33 2013
@@ -39,6 +39,7 @@
 #include "svn_cache_config.h"
 #include "svn_version.h"
 #include "svn_props.h"
+#include "svn_sorts.h"
 #include "svn_time.h"
 #include "svn_user.h"
 #include "svn_xml.h"
@@ -47,6 +48,8 @@
 #include "private/svn_subr_private.h"
 #include "private/svn_cmdline_private.h"
 
+#include "../libsvn_fs_fs/fs.h" /* for SVN_FS_FS__MIN_PACKED_FORMAT */
+
 #include "svn_private_config.h"
 
 
@@ -753,6 +756,39 @@ subcommand_deltify(apr_getopt_t *os, voi
   return SVN_NO_ERROR;
 }
 
+static void
+cmdline_stream_printf(svn_stream_t *stream,
+                      apr_pool_t *pool,
+                      const char *fmt,
+                      ...)
+  __attribute__((format(printf, 3, 4)));
+
+static void
+cmdline_stream_printf(svn_stream_t *stream,
+                      apr_pool_t *pool,
+                      const char *fmt,
+                      ...)
+{
+  const char *message;
+  va_list ap;
+  svn_error_t *err;
+  const char *out;
+
+  va_start(ap, fmt);
+  message = apr_pvsprintf(pool, fmt, ap);
+  va_end(ap);
+
+  err = svn_cmdline_cstring_from_utf8(&out, message, pool);
+
+  if (err)
+    {
+      svn_error_clear(err);
+      out = svn_cmdline_cstring_from_utf8_fuzzy(message, pool);
+    }
+
+  svn_error_clear(svn_stream_puts(stream, out));
+}
+
 
 /* Implementation of svn_repos_notify_func_t to wrap the output to a
    response stream for svn_repos_dump_fs2() and svn_repos_verify_fs() */
@@ -762,36 +798,35 @@ repos_notify_handler(void *baton,
                      apr_pool_t *scratch_pool)
 {
   svn_stream_t *feedback_stream = baton;
-  apr_size_t len;
 
   switch (notify->action)
   {
     case svn_repos_notify_warning:
-      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                        "WARNING 0x%04x: %s\n", notify->warning,
-                                        notify->warning_str));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            "WARNING 0x%04x: %s\n", notify->warning,
+                            notify->warning_str);
       return;
 
     case svn_repos_notify_dump_rev_end:
-      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                        _("* Dumped revision %ld.\n"),
-                                        notify->revision));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            _("* Dumped revision %ld.\n"),
+                            notify->revision);
       return;
 
     case svn_repos_notify_verify_rev_end:
-      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                        _("* Verified revision %ld.\n"),
-                                        notify->revision));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            _("* Verified revision %ld.\n"),
+                            notify->revision);
       return;
 
     case svn_repos_notify_verify_rev_structure:
       if (notify->revision == SVN_INVALID_REVNUM)
-        svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                _("* Verifying repository metadata ...\n")));
+        cmdline_stream_printf(feedback_stream, scratch_pool,
+                              _("* Verifying repository metadata ...\n"));
       else
-        svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                        _("* Verifying metadata at revision %ld ...\n"),
-                        notify->revision));
+        cmdline_stream_printf(feedback_stream, scratch_pool,
+                              _("* Verifying metadata at revision %ld ...\n"),
+                              notify->revision);
       return;
 
     case svn_repos_notify_pack_shard_start:
@@ -799,14 +834,14 @@ repos_notify_handler(void *baton,
         const char *shardstr = apr_psprintf(scratch_pool,
                                             "%" APR_INT64_T_FMT,
                                             notify->shard);
-        svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                          _("Packing revisions in shard %s..."),
-                                          shardstr));
+        cmdline_stream_printf(feedback_stream, scratch_pool,
+                              _("Packing revisions in shard %s..."),
+                              shardstr);
       }
       return;
 
     case svn_repos_notify_pack_shard_end:
-      svn_error_clear(svn_stream_puts(feedback_stream, _("done.\n")));
+      cmdline_stream_printf(feedback_stream, scratch_pool, _("done.\n"));
       return;
 
     case svn_repos_notify_pack_shard_start_revprop:
@@ -814,30 +849,30 @@ repos_notify_handler(void *baton,
         const char *shardstr = apr_psprintf(scratch_pool,
                                             "%" APR_INT64_T_FMT,
                                             notify->shard);
-        svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                          _("Packing revprops in shard %s..."),
-                                          shardstr));
+        cmdline_stream_printf(feedback_stream, scratch_pool,
+                              _("Packing revprops in shard %s..."),
+                              shardstr);
       }
       return;
 
     case svn_repos_notify_pack_shard_end_revprop:
-      svn_error_clear(svn_stream_puts(feedback_stream, _("done.\n")));
+      cmdline_stream_printf(feedback_stream, scratch_pool, _("done.\n"));
       return;
 
     case svn_repos_notify_load_txn_committed:
       if (notify->old_revision == SVN_INVALID_REVNUM)
         {
-          svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                            _("\n------- Committed revision %ld >>>\n\n"),
-                            notify->new_revision));
+          cmdline_stream_printf(feedback_stream, scratch_pool,
+                                _("\n------- Committed revision %ld >>>\n\n"),
+                                notify->new_revision);
         }
       else
         {
-          svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                            _("\n------- Committed new rev %ld"
-                              " (loaded from original rev %ld"
-                              ") >>>\n\n"), notify->new_revision,
-                              notify->old_revision));
+          cmdline_stream_printf(feedback_stream, scratch_pool,
+                                _("\n------- Committed new rev %ld"
+                                  " (loaded from original rev %ld"
+                                  ") >>>\n\n"), notify->new_revision,
+                                notify->old_revision);
         }
       return;
 
@@ -846,27 +881,27 @@ repos_notify_handler(void *baton,
         switch (notify->node_action)
         {
           case svn_node_action_change:
-            svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+            cmdline_stream_printf(feedback_stream, scratch_pool,
                                   _("     * editing path : %s ..."),
-                                  notify->path));
+                                  notify->path);
             break;
 
           case svn_node_action_delete:
-            svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+            cmdline_stream_printf(feedback_stream, scratch_pool,
                                   _("     * deleting path : %s ..."),
-                                  notify->path));
+                                  notify->path);
             break;
 
           case svn_node_action_add:
-            svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+            cmdline_stream_printf(feedback_stream, scratch_pool,
                                   _("     * adding path : %s ..."),
-                                  notify->path));
+                                  notify->path);
             break;
 
           case svn_node_action_replace:
-            svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
+            cmdline_stream_printf(feedback_stream, scratch_pool,
                                   _("     * replacing path : %s ..."),
-                                  notify->path));
+                                  notify->path);
             break;
 
         }
@@ -874,32 +909,30 @@ repos_notify_handler(void *baton,
       return;
 
     case svn_repos_notify_load_node_done:
-      len = 7;
-      svn_error_clear(svn_stream_write(feedback_stream, _(" done.\n"), &len));
+      cmdline_stream_printf(feedback_stream, scratch_pool, _(" done.\n"));
       return;
 
     case svn_repos_notify_load_copied_node:
-      len = 9;
-      svn_error_clear(svn_stream_write(feedback_stream, "COPIED...", &len));
+      cmdline_stream_printf(feedback_stream, scratch_pool, "COPIED...");
       return;
 
     case svn_repos_notify_load_txn_start:
-      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                _("<<< Started new transaction, based on "
-                                  "original revision %ld\n"),
-                                notify->old_revision));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            _("<<< Started new transaction, based on "
+                              "original revision %ld\n"),
+                            notify->old_revision);
       return;
 
     case svn_repos_notify_load_skipped_rev:
-      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                _("<<< Skipped original revision %ld\n"),
-                                notify->old_revision));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            _("<<< Skipped original revision %ld\n"),
+                            notify->old_revision);
       return;
 
     case svn_repos_notify_load_normalized_mergeinfo:
-      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                                _(" removing '\\r' from %s ..."),
-                                SVN_PROP_MERGEINFO));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            _(" removing '\\r' from %s ..."),
+                            SVN_PROP_MERGEINFO);
       return;
 
     case svn_repos_notify_mutex_acquired:
@@ -908,17 +941,17 @@ repos_notify_handler(void *baton,
       return;
 
     case svn_repos_notify_recover_start:
-      svn_error_clear(svn_stream_printf(feedback_stream, scratch_pool,
-                             _("Repository lock acquired.\n"
-                               "Please wait; recovering the"
-                               " repository may take some time...\n")));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            _("Repository lock acquired.\n"
+                              "Please wait; recovering the"
+                              " repository may take some time...\n"));
       return;
 
     case svn_repos_notify_upgrade_start:
-      svn_error_clear(svn_stream_puts(feedback_stream,
-                             _("Repository lock acquired.\n"
-                               "Please wait; upgrading the"
-                               " repository may take some time...\n")));
+      cmdline_stream_printf(feedback_stream, scratch_pool,
+                            _("Repository lock acquired.\n"
+                              "Please wait; upgrading the"
+                              " repository may take some time...\n"));
       return;
 
     default:
@@ -1644,6 +1677,7 @@ subcommand_info(apr_getopt_t *os, void *
   struct svnadmin_opt_state *opt_state = baton;
   svn_repos_t *repos;
   svn_fs_t *fs;
+  int fs_format;
 
   /* Expect no more arguments. */
   SVN_ERR(parse_args(NULL, os, 0, 0, pool));
@@ -1655,7 +1689,7 @@ subcommand_info(apr_getopt_t *os, void *
                                                     pool)));
 
   {
-    int repos_format, fs_format, minor;
+    int repos_format, minor;
     svn_version_t *repos_version, *fs_version;
     SVN_ERR(svn_repos_info_format(&repos_format, &repos_version,
                                   repos, pool, pool));
@@ -1664,8 +1698,7 @@ subcommand_info(apr_getopt_t *os, void *
 
     SVN_ERR(svn_fs_info_format(&fs_format, &fs_version,
                                fs, pool, pool));
-    SVN_ERR(svn_cmdline_printf(pool, _("Filesystem Format: %d\n"),
-                               fs_format));
+    /* fs_format will be printed later. */
 
     SVN_ERR_ASSERT(repos_version->major == SVN_VER_MAJOR);
     SVN_ERR_ASSERT(fs_version->major == SVN_VER_MAJOR);
@@ -1681,19 +1714,21 @@ subcommand_info(apr_getopt_t *os, void *
   {
     apr_hash_t *capabilities_set;
     apr_array_header_t *capabilities;
-    char *as_string;
+    int i;
 
     SVN_ERR(svn_repos_capabilities(&capabilities_set, repos, pool, pool));
-    SVN_ERR(svn_hash_keys(&capabilities, capabilities_set, pool));
-    as_string = svn_cstring_join(capabilities, ",", pool);
+    capabilities = svn_sort__hash(capabilities_set,
+                                  svn_sort_compare_items_lexically,
+                                  pool);
 
-    /* Delete the trailing comma. */
-    if (as_string[0])
-      as_string[strlen(as_string)-1] = '\0';
-
-    if (capabilities->nelts)
-      SVN_ERR(svn_cmdline_printf(pool, _("Repository Capabilities: %s\n"),
-                                 as_string));
+    for (i = 0; i < capabilities->nelts; i++)
+      {
+        svn_sort__item_t *item = &APR_ARRAY_IDX(capabilities, i,
+                                                svn_sort__item_t);
+        const char *capability = item->key;
+        SVN_ERR(svn_cmdline_printf(pool, _("Repository Capability: %s\n"),
+                                   capability));
+      }
   }
 
   {
@@ -1702,6 +1737,8 @@ subcommand_info(apr_getopt_t *os, void *
     SVN_ERR(svn_fs_info(&info, fs, pool, pool));
     SVN_ERR(svn_cmdline_printf(pool, _("Filesystem Type: %s\n"),
                                info->fs_type));
+    SVN_ERR(svn_cmdline_printf(pool, _("Filesystem Format: %d\n"),
+                               fs_format));
     if (!strcmp(info->fs_type, SVN_FS_TYPE_FSFS))
       {
         const svn_fs_fsfs_info_t *fsfs_info = (const void *)info;
@@ -1717,12 +1754,15 @@ subcommand_info(apr_getopt_t *os, void *
           SVN_ERR(svn_cmdline_printf(pool, _("FSFS Shard Size: %d\n"),
                                      fsfs_info->shard_size));
 
-        if (fsfs_info->min_unpacked_rev + fsfs_info->shard_size > youngest + 1)
-          SVN_ERR(svn_cmdline_printf(pool, _("FSFS Packed: yes\n")));
-        else if (fsfs_info->min_unpacked_rev)
-          SVN_ERR(svn_cmdline_printf(pool, _("FSFS Packed: partly\n")));
-        else
-          SVN_ERR(svn_cmdline_printf(pool, _("FSFS Packed: no\n")));
+        /* Print packing statistics, if supported by the FS format. */
+        if (fs_format >= SVN_FS_FS__MIN_PACKED_FORMAT && fsfs_info->shard_size)
+          {
+            const int shard_size = fsfs_info->shard_size;
+            const int shards_packed = fsfs_info->min_unpacked_rev / shard_size;
+            const int shards_full = (youngest + 1) / shard_size;
+            SVN_ERR(svn_cmdline_printf(pool, _("FSFS Shards Packed: %d/%d\n"),
+                                       shards_packed, shards_full));
+          }
       }
   }
 
@@ -1733,7 +1773,9 @@ subcommand_info(apr_getopt_t *os, void *
     SVN_ERR(svn_fs_info_config_files(&files, fs, pool, pool));
     for (i = 0; i < files->nelts; i++)
       SVN_ERR(svn_cmdline_printf(pool, _("Configuration File: %s\n"),
-                                 APR_ARRAY_IDX(files, i, const char *)));
+                                 svn_dirent_local_style(
+                                   APR_ARRAY_IDX(files, i, const char *),
+                                   pool)));
   }
 
   /* 'svn info' prints an extra newline here, to support multiple targets.

Modified: subversion/branches/fsfs-format7/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svndumpfilter/svndumpfilter.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/branches/fsfs-format7/subversion/svndumpfilter/svndumpfilter.c Thu May 23 22:04:33 2013
@@ -399,12 +399,11 @@ output_revision(struct revision_baton_t 
       apr_hash_t *old_props = rb->props;
       rb->has_props = TRUE;
       rb->props = apr_hash_make(hash_pool);
-      svn_hash_sets_fixed_key(rb->props, SVN_PROP_REVISION_DATE,
-                              svn_hash_gets_fixed_key(old_props,
-                                                      SVN_PROP_REVISION_DATE));
-      svn_hash_sets_fixed_key(rb->props, SVN_PROP_REVISION_LOG,
-                              svn_string_create(_("This is an empty revision "
-                                                  "for padding."), hash_pool));
+      svn_hash_sets(rb->props, SVN_PROP_REVISION_DATE,
+                    svn_hash_gets(old_props, SVN_PROP_REVISION_DATE));
+      svn_hash_sets(rb->props, SVN_PROP_REVISION_LOG,
+                    svn_string_create(_("This is an empty revision for "
+                                        "padding."), hash_pool));
     }
 
   /* Now, "rasterize" the props to a string, and append the property

Modified: subversion/branches/fsfs-format7/subversion/svnmucc/svnmucc.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svnmucc/svnmucc.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svnmucc/svnmucc.c (original)
+++ subversion/branches/fsfs-format7/subversion/svnmucc/svnmucc.c Thu May 23 22:04:33 2013
@@ -751,7 +751,7 @@ execute(const apr_array_header_t *action
                                             "svnmucc: ", "--config-option"));
   cfg_config = svn_hash_gets(config, SVN_CONFIG_CATEGORY_CONFIG);
 
-  if (! svn_hash_gets_fixed_key(revprops, SVN_PROP_REVISION_LOG))
+  if (! svn_hash_gets(revprops, SVN_PROP_REVISION_LOG))
     {
       svn_string_t *msg = svn_string_create("", pool);
 
@@ -770,7 +770,7 @@ execute(const apr_array_header_t *action
                       TRUE, NULL, apr_hash_pool_get(revprops)));
         }
 
-      svn_hash_sets_fixed_key(revprops, SVN_PROP_REVISION_LOG, msg);
+      svn_hash_sets(revprops, SVN_PROP_REVISION_LOG, msg);
     }
 
   SVN_ERR(create_ra_callbacks(&ra_callbacks, username, password, config_dir,
@@ -1028,13 +1028,13 @@ sanitize_log_sources(apr_hash_t *revprop
         return mutually_exclusive_logs_error();
 
       SVN_ERR(svn_utf_cstring_to_utf8(&message, filedata->data, hash_pool));
-      svn_hash_sets_fixed_key(revprops, SVN_PROP_REVISION_LOG,
-                              svn_stringbuf__morph_into_string(filedata));
+      svn_hash_sets(revprops, SVN_PROP_REVISION_LOG,
+                    svn_stringbuf__morph_into_string(filedata));
     }
   else if (message)
     {
-      svn_hash_sets_fixed_key(revprops, SVN_PROP_REVISION_LOG,
-                              svn_string_create(message, hash_pool));
+      svn_hash_sets(revprops, SVN_PROP_REVISION_LOG,
+                    svn_string_create(message, hash_pool));
     }
 
   return SVN_NO_ERROR;

Modified: subversion/branches/fsfs-format7/subversion/svnrdump/load_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svnrdump/load_editor.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svnrdump/load_editor.c (original)
+++ subversion/branches/fsfs-format7/subversion/svnrdump/load_editor.c Thu May 23 22:04:33 2013
@@ -635,10 +635,8 @@ new_node_record(void **node_baton,
          commit_editor. We'll set them separately using the RA API
          after closing the editor (see close_revision). */
 
-      svn_hash_sets_fixed_key(rb->revprop_table,
-                              SVN_PROP_REVISION_AUTHOR, NULL);
-      svn_hash_sets_fixed_key(rb->revprop_table,
-                              SVN_PROP_REVISION_DATE, NULL);
+      svn_hash_sets(rb->revprop_table, SVN_PROP_REVISION_AUTHOR, NULL);
+      svn_hash_sets(rb->revprop_table, SVN_PROP_REVISION_DATE, NULL);
 
       SVN_ERR(svn_ra__register_editor_shim_callbacks(rb->pb->session,
                                     get_shim_callbacks(rb, rb->pool)));

Modified: subversion/branches/fsfs-format7/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svnserve/serve.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svnserve/serve.c (original)
+++ subversion/branches/fsfs-format7/subversion/svnserve/serve.c Thu May 23 22:04:33 2013
@@ -1446,14 +1446,14 @@ static svn_error_t *commit(svn_ra_svn_co
   else
     {
       revprop_table = apr_hash_make(pool);
-      svn_hash_sets_fixed_key(revprop_table, SVN_PROP_REVISION_LOG,
-                              svn_string_create(log_msg, pool));
+      svn_hash_sets(revprop_table, SVN_PROP_REVISION_LOG,
+                    svn_string_create(log_msg, pool));
     }
 
   /* Get author from the baton, making sure clients can't circumvent
      the authentication via the revision props. */
-  svn_hash_sets_fixed_key(revprop_table, SVN_PROP_REVISION_AUTHOR,
-                          b->user ? svn_string_create(b->user, pool) : NULL);
+  svn_hash_sets(revprop_table, SVN_PROP_REVISION_AUTHOR,
+                b->user ? svn_string_create(b->user, pool) : NULL);
 
   ccb.pool = pool;
   ccb.new_rev = &new_rev;

Modified: subversion/branches/fsfs-format7/subversion/svnsync/svnsync.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svnsync/svnsync.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svnsync/svnsync.c (original)
+++ subversion/branches/fsfs-format7/subversion/svnsync/svnsync.c Thu May 23 22:04:33 2013
@@ -1235,9 +1235,9 @@ replay_rev_started(svn_revnum_t revision
      have to set it to at least the empty string. If there's a svn:log
      property on this revision, we will write the actual value in the
      replay_rev_finished callback. */
-  if (! svn_hash_gets_fixed_key(filtered, SVN_PROP_REVISION_LOG))
-    svn_hash_sets_fixed_key(filtered, SVN_PROP_REVISION_LOG,
-                            svn_string_create_empty(pool));
+  if (! svn_hash_gets(filtered, SVN_PROP_REVISION_LOG))
+    svn_hash_sets(filtered, SVN_PROP_REVISION_LOG,
+                  svn_string_create_empty(pool));
 
   /* If necessary, normalize encoding and line ending style. Add the number
      of properties that required EOL normalization to the overall count

Modified: subversion/branches/fsfs-format7/subversion/tests/cmdline/merge_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/cmdline/merge_tests.py?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/cmdline/merge_tests.py (original)
+++ subversion/branches/fsfs-format7/subversion/tests/cmdline/merge_tests.py Thu May 23 22:04:33 2013
@@ -19010,7 +19010,6 @@ def conflicted_split_merge_with_resolve(
 # depth WC is broken'.
 @SkipUnless(server_has_mergeinfo)
 @Issues(4367)
-@XFail()
 def merge_to_empty_target_merge_to_infinite_target(sbox):
   "repeat merge to infinite depth WC conflicts"
 
@@ -19076,9 +19075,8 @@ def merge_to_empty_target_merge_to_infin
   expected_output = wc.State(A_COPY_path, {
     'B/B1'              : Item(status='A '),
     'B/B1/test.txt'     : Item(status='A '),
-    'B/B1/B1a'          : Item(status='A '),
+    'B/B1/B1a'          : Item(status='D ', prev_status='A '),
     'B/B1/B1a/test.txt' : Item(status='A '),
-    'B/B1/B1a'          : Item(status='D '),
     })
   expected_mergeinfo_output = wc.State(A_COPY_path, {
     ''  : Item(status=' U'),
@@ -19155,7 +19153,7 @@ def merge_to_empty_target_merge_to_infin
                                        None, 1, 0)
 
   # Commit the merge.
-  sbox.simple_commit()
+  #sbox.simple_commit()
 
 ########################################################################
 # Run the tests

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_client/client-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_client/client-test.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_client/client-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_client/client-test.c Thu May 23 22:04:33 2013
@@ -400,7 +400,7 @@ test_patch(const svn_test_opts_t *opts,
       SVN_ERR(svn_io_file_write(patch_file, unidiff_patch[i], &len, pool));
       SVN_TEST_ASSERT(len == strlen(unidiff_patch[i]));
     }
-  SVN_ERR(svn_io_file_flush_to_disk(patch_file, pool));
+  SVN_ERR(svn_io_file_flush(patch_file, pool));
 
   /* Apply the patch. */
   pcb.patched_tempfiles = apr_hash_make(pool);

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_diff/diff-diff3-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_diff/diff-diff3-test.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_diff/diff-diff3-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_diff/diff-diff3-test.c Thu May 23 22:04:33 2013
@@ -2947,7 +2947,7 @@ struct svn_test_descriptor_t test_funcs[
     SVN_TEST_PASS2(test_identical_suffix,
                    "identical suffix starts at the boundary of a chunk"),
     SVN_TEST_PASS2(test_token_compare,
-                   "compare tokes at the chunk boundary"),
+                   "compare tokens at the chunk boundary"),
     SVN_TEST_PASS2(two_way_issue_3362_v1,
                    "2-way issue #3362 test v1"),
     SVN_TEST_PASS2(two_way_issue_3362_v2,

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_fs_fs/fs-pack-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_fs_fs/fs-pack-test.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_fs_fs/fs-pack-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_fs_fs/fs-pack-test.c Thu May 23 22:04:33 2013
@@ -71,17 +71,8 @@ write_format(const char *path,
       contents = apr_psprintf(pool, "%d\n", format);
     }
 
-    {
-      const char *path_tmp;
-
-      SVN_ERR(svn_io_write_unique(&path_tmp,
-                                  svn_dirent_dirname(path, pool),
-                                  contents, strlen(contents),
-                                  svn_io_file_del_none, pool));
-
-      /* rename the temp file as the real destination */
-      SVN_ERR(svn_io_file_rename(path_tmp, path, pool));
-    }
+  SVN_ERR(svn_io_write_atomic(path, contents, strlen(contents),
+                              NULL /* copy perms */, pool));
 
   /* And set the perms to make it read only */
   return svn_io_set_file_read_only(path, FALSE, pool);

Modified: subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c (original)
+++ subversion/branches/fsfs-format7/subversion/tests/libsvn_subr/auth-test.c Thu May 23 22:04:33 2013
@@ -319,13 +319,7 @@ struct svn_test_descriptor_t test_funcs[
     SVN_TEST_NULL,
     SVN_TEST_PASS2(test_platform_specific_auth_providers,
                    "test retrieving platform-specific auth providers"),
-#ifndef SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE
     SVN_TEST_PASS2(test_auth_clear,
                    "test svn_auth_clear()"),
-#else
-    SVN_TEST_WIMP(test_auth_clear,
-                  "test svn_auth_clear()",
-                  "Needs testing with SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE"),
-#endif
     SVN_TEST_NULL
   };

Modified: subversion/branches/fsfs-format7/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/tools/dist/backport.pl?rev=1485869&r1=1485868&r2=1485869&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/tools/dist/backport.pl (original)
+++ subversion/branches/fsfs-format7/tools/dist/backport.pl Thu May 23 22:04:33 2013
@@ -123,7 +123,9 @@ fi
 $SVN diff > $backupfile
 cp STATUS STATUS.$$
 $SVNq revert -R .
-mv STATUS.$$ STATUS
+if $MAY_COMMIT ; then
+  mv STATUS.$$ STATUS
+fi
 $SVNq up
 $SVNq merge $mergeargs
 if [ "`$SVN status -q | wc -l`" -eq 1 ]; then
@@ -161,9 +163,9 @@ else
 fi
 EOF
 
-  open SHELL, '|-', qw#/bin/sh# or die $!;
+  open SHELL, '|-', qw#/bin/sh# or die "$! (in '$entry{header}')";
   print SHELL $script;
-  close SHELL or warn "$0: sh($?): $!";
+  close SHELL or warn "$0: sh($?): $! (in '$entry{header}')";
 
   unlink $backupfile if -z $backupfile;
   unlink $logmsg_filename unless $? or $!;