You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2018/11/01 15:34:23 UTC

svn commit: r1845488 [1/2] - in /subversion/branches/better-pristines: ./ build/ac-macros/ notes/ subversion/bindings/javahl/native/ subversion/bindings/swig/include/ subversion/include/ subversion/include/private/ subversion/libsvn_client/ subversion/...

Author: brane
Date: Thu Nov  1 15:34:22 2018
New Revision: 1845488

URL: http://svn.apache.org/viewvc?rev=1845488&view=rev
Log:
Sync from the multi-wc-format up to r1845487.

Modified:
    subversion/branches/better-pristines/   (props changed)
    subversion/branches/better-pristines/CHANGES
    subversion/branches/better-pristines/build/ac-macros/serf.m4
    subversion/branches/better-pristines/configure.ac
    subversion/branches/better-pristines/notes/dump-load-format.txt
    subversion/branches/better-pristines/subversion/bindings/javahl/native/SVNClient.cpp
    subversion/branches/better-pristines/subversion/bindings/swig/include/svn_types.swg
    subversion/branches/better-pristines/subversion/include/private/svn_repos_private.h
    subversion/branches/better-pristines/subversion/include/svn_wc.h
    subversion/branches/better-pristines/subversion/libsvn_client/copy.c
    subversion/branches/better-pristines/subversion/libsvn_client/revisions.c
    subversion/branches/better-pristines/subversion/libsvn_repos/dump.c
    subversion/branches/better-pristines/subversion/libsvn_repos/dump_editor.c
    subversion/branches/better-pristines/subversion/libsvn_subr/io.c
    subversion/branches/better-pristines/subversion/libsvn_subr/sqlite3wrapper.c
    subversion/branches/better-pristines/subversion/libsvn_subr/sysinfo.c
    subversion/branches/better-pristines/subversion/libsvn_wc/info.c
    subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c
    subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql
    subversion/branches/better-pristines/subversion/libsvn_wc/wc.h
    subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c
    subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.h
    subversion/branches/better-pristines/subversion/mod_authz_svn/mod_authz_svn.c
    subversion/branches/better-pristines/subversion/mod_dav_svn/mod_dav_svn.c
    subversion/branches/better-pristines/subversion/svn/info-cmd.c
    subversion/branches/better-pristines/subversion/svn/svn.c
    subversion/branches/better-pristines/subversion/svndumpfilter/svndumpfilter.c
    subversion/branches/better-pristines/subversion/svnrdump/load_editor.c
    subversion/branches/better-pristines/subversion/svnrdump/svnrdump.c
    subversion/branches/better-pristines/subversion/svnrdump/svnrdump.h
    subversion/branches/better-pristines/subversion/tests/cmdline/basic_tests.py
    subversion/branches/better-pristines/subversion/tests/cmdline/copy_tests.py
    subversion/branches/better-pristines/subversion/tests/cmdline/svnrdump_tests.py
    subversion/branches/better-pristines/tools/buildbot/slaves/svn-x64-macosx/setenv.sh
    subversion/branches/better-pristines/tools/buildbot/slaves/svn-x64-macosx/svnbuild-bindings.sh
    subversion/branches/better-pristines/tools/buildbot/slaves/svn-x64-macosx/svnbuild.sh
    subversion/branches/better-pristines/tools/buildbot/slaves/svn-x64-macosx/svncheck-bindings.sh
    subversion/branches/better-pristines/tools/buildbot/slaves/svn-x64-macosx/svncheck.sh
    subversion/branches/better-pristines/tools/dev/unix-build/Makefile.svn
    subversion/branches/better-pristines/tools/dist/backport.pl
    subversion/branches/better-pristines/tools/dist/release.py

Propchange: subversion/branches/better-pristines/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Nov  1 15:34:22 2018
@@ -63,7 +63,7 @@
 /subversion/branches/merge-skips-obstructions:874525-874615
 /subversion/branches/move-tracking-2:1606692-1714632
 /subversion/branches/multi-layer-moves:1239019-1300930
-/subversion/branches/multi-wc-format:1843076-1843080
+/subversion/branches/multi-wc-format:1843076-1845487
 /subversion/branches/nfc-nfd-aware-client:870276,870376
 /subversion/branches/node_pool:1304828-1305388
 /subversion/branches/patch-exec:1692717-1705390
@@ -102,4 +102,4 @@
 /subversion/branches/verify-at-commit:1462039-1462408
 /subversion/branches/verify-keep-going:1439280-1546110
 /subversion/branches/wc-collate-path:1402685-1480384
-/subversion/trunk:1807118-1843079
+/subversion/trunk:1807118-1845475

Modified: subversion/branches/better-pristines/CHANGES
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/CHANGES?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/CHANGES (original)
+++ subversion/branches/better-pristines/CHANGES Thu Nov  1 15:34:22 2018
@@ -8,8 +8,32 @@ Version 1.12.0
 (?? ??? 20XX, from /branches/1.12.x)
 https://svn.apache.org/repos/asf/subversion/tags/1.12.0
 
+ User-visible changes:
+  - Major new features:
+
+  - Minor new features and improvements:
+    * 'svn --version --verbose' shows loaded libraries on Linux (r1843774)
+    * 'svnrdump' can read/write a file instead of stdin/stdout (r1844906)
+
+  - Client-side bugfixes:
+    * Repos-to-WC copy with --parents works with absent target (r1843888)
+
+  - Server-side bugfixes:
+
+  - Client-side and server-side bugfixes:
+
+  - Other tool improvements and bugfixes:
+
+ Developer-visible changes:
+  - General:
+    * Storing passwords in plain text on disk is disabled by default (r1845377)
+
+  - Bindings:
+    * Fixed potential core dump in JavaHL's ISVNClient.diff (r1845408)
+
+
 Version 1.11.0
-(24 Oct 2018, from /branches/1.11.x)
+(30 Oct 2018, from /branches/1.11.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.11.0
 
  User-visible changes:
@@ -58,7 +82,7 @@ http://svn.apache.org/repos/asf/subversi
 
 
 Version 1.10.3
-(?? Oct 2018, from /branches/1.10.x)
+(10 Oct 2018, from /branches/1.10.x)
 http://svn.apache.org/repos/asf/subversion/tags/1.10.3
 
  User-visible changes:

Modified: subversion/branches/better-pristines/build/ac-macros/serf.m4
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/build/ac-macros/serf.m4?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/build/ac-macros/serf.m4 (original)
+++ subversion/branches/better-pristines/build/ac-macros/serf.m4 Thu Nov  1 15:34:22 2018
@@ -168,8 +168,8 @@ AC_DEFUN(SVN_SERF_PKG_CONFIG,
         if $PKG_CONFIG $serf_pc_arg --atleast-version=$serf_check_version; then
           AC_MSG_RESULT([yes])
           serf_found=yes
-          SVN_SERF_INCLUDES=[`$PKG_CONFIG $serf_pc_arg --cflags | $SED -e 's/ -D[^ ]*//g' -e 's/^-D[^ ]*//g'`]
-          SVN_SERF_LIBS=`$PKG_CONFIG $serf_pc_arg --libs-only-l` 
+          SVN_SERF_INCLUDES=[`$PKG_CONFIG $serf_pc_arg --cflags-only-I`]
+          SVN_SERF_LIBS=[`$PKG_CONFIG $serf_pc_arg --libs-only-l`]
           dnl don't use --libs-only-L because then we might miss some options
           LDFLAGS=["$LDFLAGS `$PKG_CONFIG $serf_pc_arg --libs | $SED -e 's/-l[^ ]*//g'`"]
           break

Modified: subversion/branches/better-pristines/configure.ac
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/configure.ac?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/configure.ac (original)
+++ subversion/branches/better-pristines/configure.ac Thu Nov  1 15:34:22 2018
@@ -867,18 +867,21 @@ fi
 
 dnl plaintext passwords -------------------
 AC_ARG_ENABLE(plaintext-password-storage,
-AS_HELP_STRING([--disable-plaintext-password-storage],
-               [Disable on-disk caching of plaintext passwords and passphrases.
-                (Leaving this functionality enabled will not force Subversion
+AS_HELP_STRING([--enable-plaintext-password-storage],
+               [Enable on-disk caching of plaintext passwords and passphrases.
+                (Enabling this functionality will not force Subversion
                 to store passwords in plaintext, but does permit users to
                 explicitly allow that behavior via runtime configuration.)]),
-[
-   if test "$enableval" = "no"; then
-      AC_MSG_NOTICE([Disabling plaintext password/passphrase storage])
-      AC_DEFINE(SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE, 1,
-                [Defined if plaintext password/passphrase storage is disabled])
-   fi
-])
+[plaintext_passwordd_storage="$enableval"],
+[plaintext_passwordd_storage="no"])
+
+if test "$plaintext_passwordd_storage" = "yes"; then
+  AC_MSG_WARN([Enabling plaintext password/passphrase storage])
+else
+  AC_MSG_NOTICE([Disabling plaintext password/passphrase storage])
+  AC_DEFINE(SVN_DISABLE_PLAINTEXT_PASSWORD_STORAGE, 1,
+            [Defined if plaintext password/passphrase storage is disabled])
+fi
 
 dnl Build and install rules -------------------
 
@@ -948,8 +951,9 @@ AC_FUNC_VPRINTF
 dnl check for functions needed in special file handling
 AC_CHECK_FUNCS(symlink readlink)
 
-dnl check for uname
+dnl check for uname and ELF headers
 AC_CHECK_HEADERS(sys/utsname.h, [AC_CHECK_FUNCS(uname)], [])
+AC_CHECK_HEADERS(elf.h)
 
 dnl check for termios
 AC_CHECK_HEADER(termios.h,[

Modified: subversion/branches/better-pristines/notes/dump-load-format.txt
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/notes/dump-load-format.txt?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/notes/dump-load-format.txt (original)
+++ subversion/branches/better-pristines/notes/dump-load-format.txt Thu Nov  1 15:34:22 2018
@@ -72,6 +72,10 @@ UUID: <hex-string>
 where the <hex-string> is the UUID of the originating repository.
 An example UUID is "7bf7a5ef-cabf-0310-b7d4-93df341afa7e".
 
+As generated by Subversion, these UUIDs are "Version 1", incorporating
+the MAC of the originating machine. The presentation is in RFC4122
+form without the "urn:" or "uuid:" prefixes.
+
 ==== Revision records ====
 
 A Revision record has three headers and is usually followed by a

Modified: subversion/branches/better-pristines/subversion/bindings/javahl/native/SVNClient.cpp
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/bindings/javahl/native/SVNClient.cpp?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/bindings/javahl/native/SVNClient.cpp (original)
+++ subversion/branches/better-pristines/subversion/bindings/javahl/native/SVNClient.cpp Thu Nov  1 15:34:22 2018
@@ -1055,7 +1055,8 @@ void SVNClient::diff(const char *target1
                                    options.useGitDiffFormat(),
                                    SVN_APR_LOCALE_CHARSET,
                                    outputStream.getStream(subPool),
-                                   NULL /* error file */,
+                                   // Discard stderr; TODO: Update JavaHL API
+                                   svn_stream_empty(subPool.getPool()),
                                    changelists.array(subPool),
                                    ctx,
                                    subPool.getPool()),
@@ -1084,7 +1085,8 @@ void SVNClient::diff(const char *target1
                                options.useGitDiffFormat(),
                                SVN_APR_LOCALE_CHARSET,
                                outputStream.getStream(subPool),
-                               NULL /* error stream */,
+                               // Discard stderr; TODO: Update JavaHL API
+                               svn_stream_empty(subPool.getPool()),
                                changelists.array(subPool),
                                ctx,
                                subPool.getPool()),

Modified: subversion/branches/better-pristines/subversion/bindings/swig/include/svn_types.swg
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/bindings/swig/include/svn_types.swg?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/bindings/swig/include/svn_types.swg (original)
+++ subversion/branches/better-pristines/subversion/bindings/swig/include/svn_types.swg Thu Nov  1 15:34:22 2018
@@ -44,6 +44,7 @@
    Known instances of "type **" which are *not* OUTPUT parameters are:
    - svn_stream_checksummed(..., const unsigned char **read_digest,
                                  const unsigned char **write_digest, ...)
+   - svn_*_change_rev_prop2(..., const svn_string_t *const *old_value_p, ...)
 */
 %typemap(in, numinputs=0) SWIGTYPE ** ($*1_ltype temp) "$1 = &temp;";
 

Modified: subversion/branches/better-pristines/subversion/include/private/svn_repos_private.h
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/include/private/svn_repos_private.h?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/include/private/svn_repos_private.h (original)
+++ subversion/branches/better-pristines/subversion/include/private/svn_repos_private.h Thu Nov  1 15:34:22 2018
@@ -297,6 +297,23 @@ svn_repos__dump_headers(svn_stream_t *st
                         svn_repos__dumpfile_headers_t *headers,
                         apr_pool_t *scratch_pool);
 
+/* Write a magic header record to DUMP_STREAM specifying format version
+ * VERSION.
+ */
+svn_error_t *
+svn_repos__dump_magic_header_record(svn_stream_t *dump_stream,
+                                    int version,
+                                    apr_pool_t *pool);
+
+/* Write a UUID record to DUMP_STREAM.
+ *
+ * If UUID is NULL then write nothing at all.
+ */
+svn_error_t *
+svn_repos__dump_uuid_header_record(svn_stream_t *dump_stream,
+                                   const char *uuid,
+                                   apr_pool_t *pool);
+
 /* Write a revision record to DUMP_STREAM for revision REVISION with revision
  * properies REVPROPS, creating appropriate headers.
  *

Modified: subversion/branches/better-pristines/subversion/include/svn_wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/include/svn_wc.h?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/include/svn_wc.h (original)
+++ subversion/branches/better-pristines/subversion/include/svn_wc.h Thu Nov  1 15:34:22 2018
@@ -3288,6 +3288,24 @@ typedef struct svn_wc_info_t
   /** The path the node was moved to, if it was moved away. Else NULL.
    * @since New in 1.8. */
   const char *moved_to_abspath;
+
+  /**
+   * The format of the working copy.
+   * @since New in 1.12.
+   */
+  int wc_format;
+
+  /**
+   * The oldest supporter working copy format.
+   * @since New in 1.12.
+   */
+  int wc_format_min;
+
+  /**
+   * The newest supporter working copy format.
+   * @since New in 1.12.
+   */
+  int wc_format_max;
 } svn_wc_info_t;
 
 /**

Modified: subversion/branches/better-pristines/subversion/libsvn_client/copy.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_client/copy.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_client/copy.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_client/copy.c Thu Nov  1 15:34:22 2018
@@ -2743,6 +2743,16 @@ repos_to_wc_copy(svn_boolean_t *timestam
           SVN_ERR(svn_client__make_local_parents(dst_parent, TRUE, ctx,
                                                  iterpool));
         }
+      else if (make_parents && dst_parent_kind == svn_node_dir)
+        {
+          SVN_ERR(svn_wc_read_kind2(&dst_parent_kind, ctx->wc_ctx, dst_parent,
+                                    FALSE, TRUE, iterpool));
+          if (dst_parent_kind == svn_node_none)
+            {
+              SVN_ERR(svn_client__make_local_parents(dst_parent, TRUE, ctx,
+                                                     iterpool));
+            }
+        }
       else if (dst_parent_kind != svn_node_dir)
         {
           return svn_error_createf(SVN_ERR_WC_NOT_WORKING_COPY, NULL,

Modified: subversion/branches/better-pristines/subversion/libsvn_client/revisions.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_client/revisions.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_client/revisions.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_client/revisions.c Thu Nov  1 15:34:22 2018
@@ -146,7 +146,14 @@ svn_client__get_revision_number(svn_revn
                                                           scratch_pool));
 
         if (revision->kind == svn_opt_revision_previous)
-          (*revnum)--;
+          {
+            if (*revnum == 0)
+              return svn_error_createf(
+                  SVN_ERR_CLIENT_BAD_REVISION, NULL,
+                  _("Path '%s' has no previous revision"),
+                  svn_dirent_local_style(local_abspath, scratch_pool));
+            --(*revnum);
+          }
       }
       break;
 

Modified: subversion/branches/better-pristines/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_repos/dump.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_repos/dump.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_repos/dump.c Thu Nov  1 15:34:22 2018
@@ -512,6 +512,30 @@ svn_repos__dump_headers(svn_stream_t *st
 }
 
 svn_error_t *
+svn_repos__dump_magic_header_record(svn_stream_t *dump_stream,
+                                    int version,
+                                    apr_pool_t *pool)
+{
+  SVN_ERR(svn_stream_printf(dump_stream, pool,
+                            SVN_REPOS_DUMPFILE_MAGIC_HEADER ": %d\n\n",
+                            version));
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_repos__dump_uuid_header_record(svn_stream_t *dump_stream,
+                                   const char *uuid,
+                                   apr_pool_t *pool)
+{
+  if (uuid)
+    {
+      SVN_ERR(svn_stream_printf(dump_stream, pool, SVN_REPOS_DUMPFILE_UUID
+                                ": %s\n\n", uuid));
+    }
+  return SVN_NO_ERROR;
+}
+
+svn_error_t *
 svn_repos__dump_revision_record(svn_stream_t *dump_stream,
                                 svn_revnum_t revision,
                                 apr_hash_t *extra_headers,
@@ -2062,11 +2086,8 @@ svn_repos_dump_fs4(svn_repos_t *repos,
 
   /* Write out "general" metadata for the dumpfile.  In this case, a
      magic header followed by a dumpfile format version. */
-  SVN_ERR(svn_stream_printf(stream, pool,
-                            SVN_REPOS_DUMPFILE_MAGIC_HEADER ": %d\n\n",
-                            version));
-  SVN_ERR(svn_stream_printf(stream, pool, SVN_REPOS_DUMPFILE_UUID
-                            ": %s\n\n", uuid));
+  SVN_ERR(svn_repos__dump_magic_header_record(stream, version, pool));
+  SVN_ERR(svn_repos__dump_uuid_header_record(stream, uuid, pool));
 
   /* Create a notify object that we can reuse in the loop. */
   if (notify_func)

Modified: subversion/branches/better-pristines/subversion/libsvn_repos/dump_editor.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_repos/dump_editor.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_repos/dump_editor.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_repos/dump_editor.c Thu Nov  1 15:34:22 2018
@@ -969,7 +969,9 @@ close_file(void *file_baton,
 
       SVN_ERR(svn_io_file_seek(eb->delta_file, APR_SET, &offset, pool));
       delta_filestream = svn_stream_from_aprfile2(eb->delta_file, TRUE, pool);
-      SVN_ERR(svn_stream_copy3(delta_filestream, eb->stream, NULL, NULL, pool));
+      SVN_ERR(svn_stream_copy3(delta_filestream,
+                               svn_stream_disown(eb->stream, pool),
+                               NULL, NULL, pool));
 
       /* Cleanup */
       SVN_ERR(svn_stream_close(delta_filestream));

Modified: subversion/branches/better-pristines/subversion/libsvn_subr/io.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_subr/io.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_subr/io.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_subr/io.c Thu Nov  1 15:34:22 2018
@@ -2547,27 +2547,36 @@ stringbuf_from_aprfile(svn_stringbuf_t *
       apr_finfo_t finfo = { 0 };
 
       /* In some cases we get size 0 and no error for non files, so we
-         also check for the name. (= cached in apr_file_t) and for FIFOs */
-      if (! apr_file_info_get(&finfo, APR_FINFO_SIZE | APR_FINFO_TYPE, file)
-          && finfo.fname && finfo.filetype != APR_PIPE)
+         also check for the name. (= cached in apr_file_t) */
+      if (! apr_file_info_get(&finfo, APR_FINFO_SIZE, file) && finfo.fname)
         {
-          /* we've got the file length. Now, read it in one go. */
+          /* In general, there is no guarantee that the given file size is
+             correct, for instance, because the underlying handle could be
+             pointing to a pipe.  We don't know that in advance, so attempt
+             to read *one more* byte than necessary.  If we get an EOF, then
+             we're done and we have succesfully avoided reading the file chunk-
+             by-chunk.  If we don't, we fall through and do so to read the
+             remaining part of the file. */
           svn_boolean_t eof;
-          res_initial_len = (apr_size_t)finfo.size;
+          res_initial_len = (apr_size_t)finfo.size + 1;
           res = svn_stringbuf_create_ensure(res_initial_len, pool);
           SVN_ERR(svn_io_file_read_full2(file, res->data,
                                          res_initial_len, &res->len,
                                          &eof, pool));
           res->data[res->len] = 0;
 
-          *result = res;
-          return SVN_NO_ERROR;
+          if (eof)
+            {
+              *result = res;
+              return SVN_NO_ERROR;
+            }
         }
     }
 
   /* XXX: We should check the incoming data for being of type binary. */
   buf = apr_palloc(pool, SVN__STREAM_CHUNK_SIZE);
-  res = svn_stringbuf_create_ensure(res_initial_len, pool);
+  if (!res)
+    res = svn_stringbuf_create_ensure(res_initial_len, pool);
 
   /* apr_file_read will not return data and eof in the same call. So this loop
    * is safe from missing read data.  */

Modified: subversion/branches/better-pristines/subversion/libsvn_subr/sqlite3wrapper.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_subr/sqlite3wrapper.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_subr/sqlite3wrapper.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_subr/sqlite3wrapper.c Thu Nov  1 15:34:22 2018
@@ -41,6 +41,12 @@
 #    endif
 #  endif
 #  ifdef __APPLE__
+     /* SQLite uses OSAtomicCompareAndSwapPtrBarrier from libkern/OSAtomic.h,
+        which has been deprecated since macOS 10.12. This will silence the
+        warning. */
+#    if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2)
+#      pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#    endif
 #    include <Availability.h>
 #    if __MAC_OS_X_VERSION_MIN_REQUIRED < 1060
        /* <libkern/OSAtomic.h> is included on OS X by sqlite3.c, and

Modified: subversion/branches/better-pristines/subversion/libsvn_subr/sysinfo.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_subr/sysinfo.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_subr/sysinfo.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_subr/sysinfo.c Thu Nov  1 15:34:22 2018
@@ -51,10 +51,22 @@
 #include "sysinfo.h"
 #include "svn_private_config.h"
 
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
 #if HAVE_SYS_UTSNAME_H
 #include <sys/utsname.h>
 #endif
 
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#if HAVE_ELF_H
+#include <elf.h>
+#endif
+
 #ifdef SVN_HAVE_MACOS_PLIST
 #include <CoreFoundation/CoreFoundation.h>
 #include <AvailabilityMacros.h>
@@ -92,6 +104,7 @@ static const apr_array_header_t *macos_s
 
 #if __linux__
 static const char *linux_release_name(apr_pool_t *pool);
+static const apr_array_header_t *linux_shared_libs(apr_pool_t *pool);
 #endif
 
 const char *
@@ -187,6 +200,8 @@ svn_sysinfo__loaded_libs(apr_pool_t *poo
   return win32_shared_libs(pool);
 #elif defined(SVN_HAVE_MACHO_ITERATE)
   return macos_shared_libs(pool);
+#elif __linux__
+  return linux_shared_libs(pool);
 #else
   return NULL;
 #endif
@@ -300,6 +315,31 @@ release_name_from_uname(apr_pool_t *pool
 
 
 #if __linux__
+/* Find the first whitespace character in a stringbuf.
+   Analogous to svn_stringbuf_first_non_whitespace. */
+static apr_size_t
+stringbuf_first_whitespace(const svn_stringbuf_t *str)
+{
+  apr_size_t i;
+  for (i = 0; i < str->len; ++i)
+    {
+      if (svn_ctype_isspace(str->data[i]))
+        return i;
+    }
+  return str->len;
+}
+
+/* Skip a whitespace-delimited field in a stringbuf. */
+static void
+stringbuf_skip_whitespace_field(svn_stringbuf_t *str)
+{
+  apr_size_t i;
+  i = stringbuf_first_whitespace(str);
+  svn_stringbuf_leftchop(str, i);
+  i = svn_stringbuf_first_non_whitespace(str);
+  svn_stringbuf_leftchop(str, i);
+}
+
 /* Split a stringbuf into a key/value pair.
    Return the key, leaving the stripped value in the stringbuf. */
 static const char *
@@ -635,6 +675,168 @@ linux_release_name(apr_pool_t *pool)
 
   return apr_psprintf(pool, "%s [%s]", release_name, uname_release);
 }
+
+#if HAVE_ELF_H
+/* Parse a hexadecimal number as a pointer value. */
+static const unsigned char *
+parse_pointer_value(const char *start, const char *limit, char **end)
+{
+  const unsigned char *ptr;
+  const apr_uint64_t val = (apr_uint64_t)apr_strtoi64(start, end, 16);
+
+  if (errno                     /* overflow */
+      || *end == start          /* no valid digits */
+      || *end >= limit)         /* representation too long */
+    return NULL;
+
+  ptr = (const unsigned char*)val;
+  if (val != (apr_uint64_t)ptr)  /* truncated value */
+    return NULL;
+
+  return ptr;
+}
+
+/* Read the ELF header at the mapping position to check if this is a shared
+   library. We only look at the ELF identification and the type. The format is
+   described here:
+       http://www.skyfree.org/linux/references/ELF_Format.pdf
+*/
+static svn_boolean_t
+check_elf_header(const unsigned char *map_start,
+                 const unsigned char *map_end)
+{
+  /* A union of all known ELF header types, for size checks. */
+  union max_elf_header_size_t
+  {
+    Elf32_Ehdr header_32;
+    Elf64_Ehdr header_64;
+  };
+
+  /* Check the size of the mapping and the ELF magic tag. */
+  if (map_end < map_start
+      || map_end - map_start < sizeof(union max_elf_header_size_t)
+      || memcmp(map_start, ELFMAG, SELFMAG))
+    {
+      return FALSE;
+    }
+
+  /* Check that this is an ELF shared library or executable file. This also
+     implicitly checks that the data encoding of the current process is the
+     same as in the loaded library. */
+  if (map_start[EI_CLASS] == ELFCLASS32)
+    {
+      const Elf32_Ehdr *hdr = (void*)map_start;
+      return (hdr->e_type == ET_DYN || hdr->e_type == ET_EXEC);
+    }
+  else if (map_start[EI_CLASS] == ELFCLASS64)
+    {
+      const Elf64_Ehdr *hdr = (void*)map_start;
+      return (hdr->e_type == ET_DYN || hdr->e_type == ET_EXEC);
+    }
+
+  return FALSE;
+}
+#endif  /* HAVE_ELF_H */
+
+static const apr_array_header_t *
+linux_shared_libs(apr_pool_t *pool)
+{
+  /* Read the list of loaded modules from /proc/[pid]/maps
+    The format is described here:
+        http://man7.org/linux/man-pages/man5/proc.5.html
+  */
+
+  const char *maps = apr_psprintf(pool, "/proc/%ld/maps", (long)getpid());
+  apr_array_header_t *result = NULL;
+  svn_boolean_t eof = FALSE;
+  svn_stream_t *stream;
+  svn_error_t *err;
+
+  err = svn_stream_open_readonly(&stream, maps, pool, pool);
+  if (err)
+    {
+      svn_error_clear(err);
+      return NULL;
+    }
+
+  /* Each line in /proc/[pid]/maps consists of whitespace-delimited fields. */
+  while (!eof)
+    {
+      svn_stringbuf_t *line;
+
+#if HAVE_ELF_H
+      const unsigned char *map_start;
+      const unsigned char *map_end;
+#endif
+
+      err = svn_stream_readline(stream, &line, "\n", &eof, pool);
+      if (err)
+        {
+          svn_error_clear(err);
+          return NULL;
+        }
+
+#if HAVE_ELF_H
+      /* Address: The mapped memory address range. */
+      {
+        const char *const limit = line->data + line->len;
+        char *end;
+
+        /* The start of the address range */
+        map_start = parse_pointer_value(line->data, limit, &end);
+        if (!map_start || *end != '-')
+          continue;
+
+        /* The end of the address range */
+        map_end = parse_pointer_value(end + 1, limit, &end);
+        if (!map_end || !svn_ctype_isspace(*end))
+          continue;
+      }
+#endif
+
+      stringbuf_skip_whitespace_field(line); /* skip address */
+
+      /* Permissions: The memory region must be readable and executable. */
+      if (line->len < 4 || line->data[0] != 'r' || line->data[2] != 'x')
+        continue;
+
+      stringbuf_skip_whitespace_field(line); /* skip perms */
+      stringbuf_skip_whitespace_field(line); /* skip offset */
+      stringbuf_skip_whitespace_field(line); /* skip device */
+
+      /* I-Node: If it is 0, there is no file associated with the region. */
+      if (line->len < 2
+          || (line->data[0] == '0' && svn_ctype_isspace(line->data[1])))
+        continue;
+
+      stringbuf_skip_whitespace_field(line); /* skip inode */
+
+      /* Consider only things that look like absolute paths.
+         Files that were removed since the process was created (due to an
+         upgrade, for example) are marked as '(deleted)'. */
+      if (line->data[0] == '/')
+        {
+          svn_version_ext_loaded_lib_t *lib;
+
+#if HAVE_ELF_H
+          if (!check_elf_header(map_start, map_end))
+            continue;
+#endif
+
+          /* We've done our best to find a mapped shared library. */
+          if (!result)
+            {
+              result = apr_array_make(pool, 32, sizeof(*lib));
+            }
+          lib = &APR_ARRAY_PUSH(result, svn_version_ext_loaded_lib_t);
+          lib->name = line->data;
+          lib->version = NULL;
+        }
+    }
+
+  svn_error_clear(svn_stream_close(stream));
+  return result;
+}
 #endif /* __linux__ */
 
 

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/info.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/info.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/info.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/info.c Thu Nov  1 15:34:22 2018
@@ -105,6 +105,11 @@ build_info_for_node(svn_wc__info2_t **in
   tmpinfo->wc_info = wc_info;
 
   wc_info->copyfrom_rev = SVN_INVALID_REVNUM;
+  wc_info->wc_format_min = SVN_WC__SUPPORTED_VERSION;
+  wc_info->wc_format_max = SVN_WC__VERSION;
+
+  SVN_ERR(svn_wc__db_get_format(&wc_info->wc_format,
+                                db, local_abspath, scratch_pool));
 
   SVN_ERR(svn_wc__db_read_info(&status, &db_kind, &tmpinfo->rev,
                                &repos_relpath,

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/upgrade.c Thu Nov  1 15:34:22 2018
@@ -1426,6 +1426,7 @@ bump_to_31(void *baton,
   return SVN_NO_ERROR;
 }
 
+#ifdef SVN_TEST_MULTI_WC_FORMAT
 static svn_error_t *
 bump_to_32(void *baton,
            svn_sqlite__db_t *sdb,
@@ -1434,6 +1435,7 @@ bump_to_32(void *baton,
   SVN_ERR(svn_sqlite__exec_statements(sdb, STMT_UPGRADE_TO_32));
   return SVN_NO_ERROR;
 }
+#endif
 
 static svn_error_t *
 upgrade_apply_dav_cache(svn_sqlite__db_t *sdb,
@@ -1636,7 +1638,9 @@ svn_wc__version_string_from_format(int w
       case SVN_WC__WC_NG_VERSION: return "1.7";
       case 29: return "1.7";
       case 31: return "1.8";
+#ifdef SVN_TEST_MULTI_WC_FORMAT
       case 32: return "1.12";
+#endif
     }
   return _("(unreleased development version)");
 }
@@ -1795,7 +1799,9 @@ svn_wc__update_schema(int *result_format
         {
           UPDATE_TO_FORMAT(30);
           UPDATE_TO_FORMAT(31);
+#ifdef SVN_TEST_MULTI_WC_FORMAT
           UPDATE_TO_FORMAT(32);
+#endif
 
           /* ### future bumps go here.  */
 #if 0

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc-metadata.sql Thu Nov  1 15:34:22 2018
@@ -708,9 +708,11 @@ WHERE l.op_depth = 0
 /* Format 32 adds the 'contents' BLOB to the PRISTINES table. When its value
    is NULL, the pristine text is stored in a file on disk. Otherwise, the
    contents of the BLOB are the (possibly compressed) pristine text. */
+#ifdef SVN_TEST_MULTI_WC_FORMAT
 -- STMT_UPGRADE_TO_32
 ALTER TABLE PRISTINE ADD COLUMN contents BLOB;
 PRAGMA user_version = 32;
+#endif
 
 
 /* ------------------------------------------------------------------------- */

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/wc.h
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc.h?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc.h (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc.h Thu Nov  1 15:34:22 2018
@@ -160,15 +160,17 @@ extern "C" {
  * == 1.8.x shipped with format 31
  * == 1.9.x shipped with format 31
  * == 1.10.x shipped with format 31
- *
- * The bump to 32 added support for compressed pristines and pristine storage
- * within the working copy database.
+ * == 1.11.x shipped with format 31
  *
  * Please document any further format changes here.
  */
 
 /* The default WC version created by the client. */
-#define SVN_WC__VERSION 32
+#ifdef SVN_TEST_MULTI_WC_FORMAT
+#  define SVN_WC__VERSION 32
+#else
+#  define SVN_WC__VERSION 31
+#endif
 
 /* The minimum WC version supported by the client.
    IMPORTANT: Update the implementation of svn_client_supported_wc_version()
@@ -204,10 +206,6 @@ extern "C" {
    sqlite_stat1 table on opening */
 #define SVN_WC__ENSURE_STAT1_TABLE 31
 
-/* In this version, we added support for compressed and in-database
-   pristine storage. */
-#define SVN_WC__COMPRESSED_PRISTINES 32
-
 /* Return a string indicating the released version (or versions) of
  * Subversion that used WC format number WC_FORMAT, or some other
  * suitable string if no released version used WC_FORMAT.

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.c Thu Nov  1 15:34:22 2018
@@ -1537,6 +1537,27 @@ svn_wc__db_init(svn_wc__db_t *db,
 
 
 svn_error_t *
+svn_wc__db_get_format(int *format,
+                      svn_wc__db_t *db,
+                      const char *local_abspath,
+                      apr_pool_t *scratch_pool)
+{
+  svn_wc__db_wcroot_t *wcroot;
+  const char *local_relpath;
+
+  SVN_ERR_ASSERT(svn_dirent_is_absolute(local_abspath));
+
+  SVN_ERR(svn_wc__db_wcroot_parse_local_abspath(
+              &wcroot, &local_relpath, db,
+              local_abspath, scratch_pool, scratch_pool));
+  VERIFY_USABLE_WCROOT(wcroot);
+
+  *format = wcroot->format;
+  return SVN_NO_ERROR;
+}
+
+
+svn_error_t *
 svn_wc__db_to_relpath(const char **local_relpath,
                       svn_wc__db_t *db,
                       const char *wri_abspath,

Modified: subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.h
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.h?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.h (original)
+++ subversion/branches/better-pristines/subversion/libsvn_wc/wc_db.h Thu Nov  1 15:34:22 2018
@@ -303,6 +303,15 @@ svn_wc__db_init(svn_wc__db_t *db,
                 svn_depth_t depth,
                 apr_pool_t *scratch_pool);
 
+/* Return the working copy format for LOCAL_ABSPATH in DB in *FORMAT.
+
+   Use SCRATCH_POOL for temporary allocations.
+*/
+svn_error_t *
+svn_wc__db_get_format(int *format,
+                      svn_wc__db_t *db,
+                      const char *local_abspath,
+                      apr_pool_t *scratch_pool);
 
 /* Compute the LOCAL_RELPATH for the given LOCAL_ABSPATH, relative
    from wri_abspath.

Modified: subversion/branches/better-pristines/subversion/mod_authz_svn/mod_authz_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/mod_authz_svn/mod_authz_svn.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/mod_authz_svn/mod_authz_svn.c (original)
+++ subversion/branches/better-pristines/subversion/mod_authz_svn/mod_authz_svn.c Thu Nov  1 15:34:22 2018
@@ -912,7 +912,7 @@ access_checker(request_rec *r)
         {
           /* Set the note to force authn regardless of what access_checker_ex
              hook requires */
-          apr_table_setn(r->notes, FORCE_AUTHN_NOTE, (const char*)1);
+          apr_table_setn(r->notes, FORCE_AUTHN_NOTE, "1");
 
           /* provide the proper return so the access_checker hook doesn't
            * prevent the code from continuing on to the other auth hooks */
@@ -978,7 +978,7 @@ access_checker(request_rec *r)
            * ap_some_authn_rquired() without triggering an infinite
            * loop since the call will trigger this function to be
            * called again. */
-          apr_table_setn(r->notes, IN_SOME_AUTHN_NOTE, (const char*)1);
+          apr_table_setn(r->notes, IN_SOME_AUTHN_NOTE, "1");
           authn_required = ap_some_authn_required(r);
           apr_table_unset(r->notes, IN_SOME_AUTHN_NOTE);
           if (authn_required)
@@ -1021,7 +1021,7 @@ check_user_id(request_rec *r)
   status = req_check_access(r, conf, &repos_path, &dest_repos_path);
   if (status == OK)
     {
-      apr_table_setn(r->notes, "authz_svn-anon-ok", (const char*)1);
+      apr_table_setn(r->notes, "authz_svn-anon-ok", "1");
       log_access_verdict(APLOG_MARK, r, 1, FALSE, repos_path, dest_repos_path);
       return OK;
     }

Modified: subversion/branches/better-pristines/subversion/mod_dav_svn/mod_dav_svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/mod_dav_svn/mod_dav_svn.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/mod_dav_svn/mod_dav_svn.c (original)
+++ subversion/branches/better-pristines/subversion/mod_dav_svn/mod_dav_svn.c Thu Nov  1 15:34:22 2018
@@ -231,6 +231,9 @@ merge_server_config(apr_pool_t *p, void
       newconf->compression_level = child->compression_level;
     }
 
+  newconf->use_utf8 = INHERIT_VALUE(parent, child, use_utf8);                 
+  svn_utf_initialize2(newconf->use_utf8, p); 
+
   return newconf;
 }
 
@@ -1255,7 +1258,7 @@ static int dav_svn__translate_name(reque
 
   /* Leave a note to ourselves so that we know not to decline in the
    * map_to_storage hook. */
-  apr_table_setn(r->notes, NO_MAP_TO_STORAGE_NOTE, (const char*)1);
+  apr_table_setn(r->notes, NO_MAP_TO_STORAGE_NOTE, "1");
   return OK;
 }
 

Modified: subversion/branches/better-pristines/subversion/svn/info-cmd.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/svn/info-cmd.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/svn/info-cmd.c (original)
+++ subversion/branches/better-pristines/subversion/svn/info-cmd.c Thu Nov  1 15:34:22 2018
@@ -364,7 +364,10 @@ typedef enum
   /* Working copy information */
   info_item_wc_root,
   info_item_schedule,
-  info_item_depth
+  info_item_depth,
+  info_item_wc_format,
+  info_item_wc_format_min,
+  info_item_wc_format_max
 } info_item_t;
 
 /* Mapping between option keywords and info_item_t. */
@@ -390,6 +393,9 @@ static const info_item_map_t info_item_m
     { MAKE_STRING("wc-root"),             info_item_wc_root },
     { MAKE_STRING("schedule"),            info_item_schedule },
     { MAKE_STRING("depth"),               info_item_depth },
+    { MAKE_STRING("wc-format"),           info_item_wc_format },
+    { MAKE_STRING("wc-format-min"),       info_item_wc_format_min },
+    { MAKE_STRING("wc-format-max"),       info_item_wc_format_max },
   };
 #undef MAKE_STRING
 
@@ -1036,6 +1042,20 @@ print_info(void *baton,
 }
 
 
+/* Helper for print_info_item(): Print the value NUMBER for TARGET_PATH,
+   which may be NULL. Use POOL for temporary allocation. */
+static svn_error_t *
+print_info_item_int(int number, const char *target_path,
+                    apr_pool_t *pool)
+{
+  if (target_path)
+    SVN_ERR(svn_cmdline_printf(pool, "%-10d %s", number, target_path));
+  else
+    SVN_ERR(svn_cmdline_printf(pool, "%d", number));
+
+  return SVN_NO_ERROR;
+}
+
 /* Helper for print_info_item(): Print the value TEXT for TARGET_PATH,
    either of which may be NULL. Use POOL for temporary allocation. */
 static svn_error_t *
@@ -1158,6 +1178,24 @@ print_info_item(void *baton,
                   target_path, pool));
       break;
 
+    case info_item_wc_format:
+      SVN_ERR(print_info_item_int((info->wc_info
+                                   ? info->wc_info->wc_format : -1),
+                                  target_path, pool));
+      break;
+
+    case info_item_wc_format_min:
+      SVN_ERR(print_info_item_int((info->wc_info
+                                   ? info->wc_info->wc_format_min : -1),
+                                  target_path, pool));
+      break;
+
+    case info_item_wc_format_max:
+      SVN_ERR(print_info_item_int((info->wc_info
+                                   ? info->wc_info->wc_format_max : -1),
+                                  target_path, pool));
+      break;
+
     default:
       SVN_ERR_MALFUNCTION();
     }

Modified: subversion/branches/better-pristines/subversion/svn/svn.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/svn/svn.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/svn/svn.c (original)
+++ subversion/branches/better-pristines/subversion/svn/svn.c Thu Nov  1 15:34:22 2018
@@ -464,7 +464,13 @@ const apr_getopt_option_t svn_cl__option
                           "                             "
                           "   'schedule'   'normal','add','delete','replace'\n"
                           "                             "
-                          "   'depth'      checkout depth of TARGET in WC")},
+                          "   'depth'      checkout depth of TARGET in WC\n"
+                          "                             "
+                          "   'wc-format'  TARGET's working copy format\n"
+                          "                             "
+                          "   'wc-format-min'   oldest supported WC format\n"
+                          "                             "
+                          "   'wc-format-min'   newest supported WC format\n")},
 
   {"adds-as-modification", opt_adds_as_modification, 0,
                        N_("Local additions are merged with incoming additions\n"

Modified: subversion/branches/better-pristines/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/branches/better-pristines/subversion/svndumpfilter/svndumpfilter.c?rev=1845488&r1=1845487&r2=1845488&view=diff
==============================================================================
--- subversion/branches/better-pristines/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/branches/better-pristines/subversion/svndumpfilter/svndumpfilter.c Thu Nov  1 15:34:22 2018
@@ -271,9 +271,7 @@ magic_header_record(int version, void *p
   if (version >= SVN_REPOS_DUMPFILE_FORMAT_VERSION_DELTAS)
     pb->allow_deltas = TRUE;
 
-  SVN_ERR(svn_stream_printf(pb->out_stream, pool,
-                            SVN_REPOS_DUMPFILE_MAGIC_HEADER ": %d\n\n",
-                            version));
+  SVN_ERR(svn_repos__dump_magic_header_record(pb->out_stream, version, pool));
 
   return SVN_NO_ERROR;
 }
@@ -446,8 +444,8 @@ static svn_error_t *
 uuid_record(const char *uuid, void *parse_baton, apr_pool_t *pool)
 {
   struct parse_baton_t *pb = parse_baton;
-  SVN_ERR(svn_stream_printf(pb->out_stream, pool,
-                            SVN_REPOS_DUMPFILE_UUID ": %s\n\n", uuid));
+
+  SVN_ERR(svn_repos__dump_uuid_header_record(pb->out_stream, uuid, pool));
   return SVN_NO_ERROR;
 }
 
@@ -530,7 +528,8 @@ new_node_record(void **node_baton,
             {
               return svn_error_createf
                 (SVN_ERR_INCOMPLETE_DATA, 0,
-                 _("Invalid copy source path '%s'"), copyfrom_path);
+                 _("Invalid copy source path '%s' for '%s'"),
+                 copyfrom_path, node_path);
             }
         }
 
@@ -611,7 +610,8 @@ new_node_record(void **node_baton,
               if (! (cf_renum_val && SVN_IS_VALID_REVNUM(cf_renum_val->rev)))
                 return svn_error_createf
                   (SVN_ERR_NODE_UNEXPECTED_KIND, NULL,
-                   _("No valid copyfrom revision in filtered stream"));
+                   _("No valid copyfrom revision in filtered stream for '%s'"),
+                   node_path);
               svn_repos__dumpfile_header_pushf(
                 nb->headers, SVN_REPOS_DUMPFILE_NODE_COPYFROM_REV,
                 "%ld", cf_renum_val->rev);