You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by ju...@apache.org on 2015/02/11 17:55:08 UTC
svn commit: r1659005 - in /subversion/trunk/subversion:
include/private/svn_repos_private.h libsvn_repos/dump.c
svndumpfilter/svndumpfilter.c svnrdump/dump_editor.c
Author: julianfoad
Date: Wed Feb 11 16:55:08 2015
New Revision: 1659005
URL: http://svn.apache.org/r1659005
Log:
Make some private dumpfile APIs more opaque.
* subversion/include/private/svn_repos_private.h,
subversion/libsvn_repos/dump.c
(svn_repos__dumpfile_header_entry_t): Move from the header to the
implementation.
(svn_repos__dumpfile_headers_t): New.
(svn_repos__dumpfile_header_push,
svn_repos__dumpfile_header_pushf,
svn_repos__dump_headers,
svn_repos__dump_node_record): Use svn_repos__dumpfile_headers_t instead
of apr_array_header_t. Remove the redundant 'terminate' parameter from
svn_repos__dump_headers. Update callers.
* subversion/svndumpfilter/svndumpfilter.c
(node_baton_t): Update to use svn_repos__dumpfile_headers_t instead
of apr_array_header_t.
* subversion/svnrdump/dump_editor.c
(dir_baton,
get_props_content,
dump_node_delete,
dump_node,
dump_mkdir,
close_file): Update to use svn_repos__dumpfile_headers_t instead
of apr_array_header_t.
Modified:
subversion/trunk/subversion/include/private/svn_repos_private.h
subversion/trunk/subversion/libsvn_repos/dump.c
subversion/trunk/subversion/svndumpfilter/svndumpfilter.c
subversion/trunk/subversion/svnrdump/dump_editor.c
Modified: subversion/trunk/subversion/include/private/svn_repos_private.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_repos_private.h?rev=1659005&r1=1659004&r2=1659005&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_repos_private.h (original)
+++ subversion/trunk/subversion/include/private/svn_repos_private.h Wed Feb 11 16:55:08 2015
@@ -293,19 +293,13 @@ svn_repos__adjust_mergeinfo_property(svn
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
-/* A header entry.
- *
- * (The headers are currently declared here to be of type apr_array_header_t
- * with svn_repos__dumpfile_header_entry_t entries, but the types could
- * instead be made opaque.)
- */
-typedef struct svn_repos__dumpfile_header_entry_t {
- const char *key, *val;
-} svn_repos__dumpfile_header_entry_t;
+/* A (nearly) opaque representation of an ordered list of header lines.
+ */
+typedef struct apr_array_header_t svn_repos__dumpfile_headers_t;
/* Create an empty set of headers.
*/
-apr_array_header_t *
+svn_repos__dumpfile_headers_t *
svn_repos__dumpfile_headers_create(apr_pool_t *pool);
/* Push the header (KEY, VAL) onto HEADERS.
@@ -313,7 +307,7 @@ svn_repos__dumpfile_headers_create(apr_p
* Duplicate the key and value into HEADERS's pool.
*/
void
-svn_repos__dumpfile_header_push(apr_array_header_t *headers,
+svn_repos__dumpfile_header_push(svn_repos__dumpfile_headers_t *headers,
const char *key,
const char *val);
@@ -322,20 +316,17 @@ svn_repos__dumpfile_header_push(apr_arra
* Duplicate the key and value into HEADERS's pool.
*/
void
-svn_repos__dumpfile_header_pushf(apr_array_header_t *headers,
+svn_repos__dumpfile_header_pushf(svn_repos__dumpfile_headers_t *headers,
const char *key,
const char *val_fmt,
...)
__attribute__((format(printf, 3, 4)));
/* Write to STREAM the headers in HEADERS followed by a blank line.
- *
- * HEADERS is an array of struct {const char *key, *val;}.
*/
svn_error_t *
svn_repos__dump_headers(svn_stream_t *stream,
- apr_array_header_t *headers,
- svn_boolean_t terminate,
+ svn_repos__dumpfile_headers_t *headers,
apr_pool_t *scratch_pool);
/* Write a revision record to DUMP_STREAM for revision REVISION with revision
@@ -384,7 +375,7 @@ svn_repos__dump_revision_record(svn_stre
*/
svn_error_t *
svn_repos__dump_node_record(svn_stream_t *dump_stream,
- apr_array_header_t *headers,
+ svn_repos__dumpfile_headers_t *headers,
svn_stringbuf_t *props_str,
svn_boolean_t has_text,
svn_filesize_t text_content_length,
Modified: subversion/trunk/subversion/libsvn_repos/dump.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/dump.c?rev=1659005&r1=1659004&r2=1659005&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/dump.c (original)
+++ subversion/trunk/subversion/libsvn_repos/dump.c Wed Feb 11 16:55:08 2015
@@ -445,17 +445,24 @@ write_revision_headers(svn_stream_t *str
return SVN_NO_ERROR;
}
-apr_array_header_t *
+/* A header entry: the element type of the apr_array_header_t which is
+ * the real type of svn_repos__dumpfile_headers_t.
+ */
+typedef struct svn_repos__dumpfile_header_entry_t {
+ const char *key, *val;
+} svn_repos__dumpfile_header_entry_t;
+
+svn_repos__dumpfile_headers_t *
svn_repos__dumpfile_headers_create(apr_pool_t *pool)
{
- apr_array_header_t *headers
+ svn_repos__dumpfile_headers_t *headers
= apr_array_make(pool, 5, sizeof(svn_repos__dumpfile_header_entry_t));
return headers;
}
void
-svn_repos__dumpfile_header_push(apr_array_header_t *headers,
+svn_repos__dumpfile_header_push(svn_repos__dumpfile_headers_t *headers,
const char *key,
const char *val)
{
@@ -467,7 +474,7 @@ svn_repos__dumpfile_header_push(apr_arra
}
void
-svn_repos__dumpfile_header_pushf(apr_array_header_t *headers,
+svn_repos__dumpfile_header_pushf(svn_repos__dumpfile_headers_t *headers,
const char *key,
const char *val_fmt,
...)
@@ -484,8 +491,7 @@ svn_repos__dumpfile_header_pushf(apr_arr
svn_error_t *
svn_repos__dump_headers(svn_stream_t *stream,
- apr_array_header_t *headers,
- svn_boolean_t terminate,
+ svn_repos__dumpfile_headers_t *headers,
apr_pool_t *scratch_pool)
{
int i;
@@ -500,8 +506,7 @@ svn_repos__dump_headers(svn_stream_t *st
}
/* End of headers */
- if (terminate)
- SVN_ERR(svn_stream_puts(stream, "\n"));
+ SVN_ERR(svn_stream_puts(stream, "\n"));
return SVN_NO_ERROR;
}
@@ -565,7 +570,7 @@ svn_repos__dump_revision_record(svn_stre
svn_error_t *
svn_repos__dump_node_record(svn_stream_t *dump_stream,
- apr_array_header_t *headers,
+ svn_repos__dumpfile_headers_t *headers,
svn_stringbuf_t *props_str,
svn_boolean_t has_text,
svn_filesize_t text_content_length,
@@ -597,7 +602,7 @@ svn_repos__dump_node_record(svn_stream_t
}
/* write the headers */
- SVN_ERR(svn_repos__dump_headers(dump_stream, headers, TRUE, scratch_pool));
+ SVN_ERR(svn_repos__dump_headers(dump_stream, headers, scratch_pool));
/* write the props */
if (props_str)
@@ -1048,7 +1053,8 @@ dump_node_delete(svn_stream_t *stream,
const char *node_relpath,
apr_pool_t *pool)
{
- apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+ svn_repos__dumpfile_headers_t *headers
+ = svn_repos__dumpfile_headers_create(pool);
/* Node-path: ... */
svn_repos__dumpfile_header_push(
@@ -1058,7 +1064,7 @@ dump_node_delete(svn_stream_t *stream,
svn_repos__dumpfile_header_push(
headers, SVN_REPOS_DUMPFILE_NODE_ACTION, "delete");
- SVN_ERR(svn_repos__dump_headers(stream, headers, TRUE, pool));
+ SVN_ERR(svn_repos__dump_headers(stream, headers, pool));
return SVN_NO_ERROR;
}
@@ -1091,7 +1097,8 @@ dump_node(struct edit_baton *eb,
svn_revnum_t compare_rev = eb->current_rev - 1;
svn_fs_root_t *compare_root = NULL;
apr_file_t *delta_file = NULL;
- apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+ svn_repos__dumpfile_headers_t *headers
+ = svn_repos__dumpfile_headers_create(pool);
svn_filesize_t textlen;
/* Maybe validate the path. */
@@ -1324,7 +1331,7 @@ dump_node(struct edit_baton *eb,
then our dumpstream format demands that at a *minimum*, we
see a lone "PROPS-END" as a divider between text and props
content within the content-block. */
- SVN_ERR(svn_repos__dump_headers(eb->stream, headers, TRUE, pool));
+ SVN_ERR(svn_repos__dump_headers(eb->stream, headers, pool));
len = 1;
return svn_stream_write(eb->stream, "\n", &len); /* ### needed? */
}
Modified: subversion/trunk/subversion/svndumpfilter/svndumpfilter.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svndumpfilter/svndumpfilter.c?rev=1659005&r1=1659004&r2=1659005&view=diff
==============================================================================
--- subversion/trunk/subversion/svndumpfilter/svndumpfilter.c (original)
+++ subversion/trunk/subversion/svndumpfilter/svndumpfilter.c Wed Feb 11 16:55:08 2015
@@ -278,7 +278,7 @@ struct node_baton_t
svn_filesize_t tcl;
/* Pointers to dumpfile data. */
- apr_array_header_t *headers;
+ svn_repos__dumpfile_headers_t *headers;
svn_stringbuf_t *props;
/* Expect deltas? */
Modified: subversion/trunk/subversion/svnrdump/dump_editor.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svnrdump/dump_editor.c?rev=1659005&r1=1659004&r2=1659005&view=diff
==============================================================================
--- subversion/trunk/subversion/svnrdump/dump_editor.c (original)
+++ subversion/trunk/subversion/svnrdump/dump_editor.c Wed Feb 11 16:55:08 2015
@@ -58,7 +58,7 @@ struct dir_baton
svn_revnum_t copyfrom_rev;
/* Headers accumulated so far for this directory */
- apr_array_header_t *headers;
+ svn_repos__dumpfile_headers_t *headers;
/* Properties which were modified during change_dir_prop. */
apr_hash_t *props;
@@ -222,7 +222,7 @@ make_file_baton(const char *path,
* content section, to represent the property delta of PROPS/DELETED_PROPS.
*/
static svn_error_t *
-get_props_content(apr_array_header_t *headers,
+get_props_content(svn_repos__dumpfile_headers_t *headers,
svn_stringbuf_t **content,
apr_hash_t *props,
apr_hash_t *deleted_props,
@@ -261,7 +261,8 @@ dump_node_delete(svn_stream_t *stream,
const char *node_relpath,
apr_pool_t *pool)
{
- apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+ svn_repos__dumpfile_headers_t *headers
+ = svn_repos__dumpfile_headers_create(pool);
assert(svn_relpath_is_canonical(node_relpath));
@@ -297,7 +298,7 @@ dump_node_delete(svn_stream_t *stream,
* header block.)
*/
static svn_error_t *
-dump_node(apr_array_header_t **headers_p,
+dump_node(svn_repos__dumpfile_headers_t **headers_p,
struct dump_edit_baton *eb,
const char *repos_relpath,
struct dir_baton *db,
@@ -309,7 +310,8 @@ dump_node(apr_array_header_t **headers_p
apr_pool_t *pool)
{
const char *node_relpath = repos_relpath;
- apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+ svn_repos__dumpfile_headers_t *headers
+ = svn_repos__dumpfile_headers_create(pool);
assert(svn_relpath_is_canonical(repos_relpath));
assert(!copyfrom_path || svn_relpath_is_canonical(copyfrom_path));
@@ -436,7 +438,8 @@ dump_mkdir(struct dump_edit_baton *eb,
apr_pool_t *pool)
{
svn_stringbuf_t *prop_content;
- apr_array_header_t *headers = svn_repos__dumpfile_headers_create(pool);
+ svn_repos__dumpfile_headers_t *headers
+ = svn_repos__dumpfile_headers_create(pool);
/* Node-path: ... */
svn_repos__dumpfile_header_push(
@@ -878,7 +881,7 @@ close_file(void *file_baton,
struct dump_edit_baton *eb = fb->eb;
apr_finfo_t *info = apr_pcalloc(pool, sizeof(apr_finfo_t));
svn_stringbuf_t *propstring = NULL;
- apr_array_header_t *headers;
+ svn_repos__dumpfile_headers_t *headers;
SVN_ERR(dump_pending_dir(eb, pool));