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);