Add a dump editor and write out skeleton callback functions according to the API documentation of svn_delta_editor_t. Also expose get_dump_editor through a header. Signed-off-by: Ramkumar Ramachandra <artagnon@xxxxxxxxx> --- Makefile | 4 +- dump_editor.c | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dump_editor.h | 8 +++ dumpr_util.h | 29 ++++++++++++ 4 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 dump_editor.c create mode 100644 dump_editor.h create mode 100644 dumpr_util.h diff --git a/Makefile b/Makefile index e4d106e..fea646e 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ svndumpr: *.c *.h - $(CC) -Wall -Werror -DAPR_POOL_DEBUG -ggdb3 -O0 -o $@ svndumpr.c debug_editor.c -lsvn_client-1 -I. -I/usr/local/include/subversion-1 -I/usr/include/apr-1.0 + $(CC) -Wall -Werror -DAPR_POOL_DEBUG -ggdb3 -O0 -o $@ svndumpr.c debug_editor.c dump_editor.c -lsvn_client-1 -I. -I/usr/local/include/subversion-1 -I/usr/include/apr-1.0 svndumpr_bench: *.c *.h - $(CC) -O2 -o $@ svndumpr.c debug_editor.c -lsvn_client-1 -I. -I/usr/local/include/subversion-1 -I/usr/include/apr-1.0 + $(CC) -O2 -o $@ svndumpr.c debug_editor.c dump_editor.c -lsvn_client-1 -I. -I/usr/local/include/subversion-1 -I/usr/include/apr-1.0 clean: $(RM) svndumpr svndumpr_bench diff --git a/dump_editor.c b/dump_editor.c new file mode 100644 index 0000000..2fdf93c --- /dev/null +++ b/dump_editor.c @@ -0,0 +1,143 @@ +/* Licensed under a two-clause BSD-style license. + * See LICENSE for details. + */ + +#include "svn_pools.h" +#include "svn_error.h" +#include "svn_iter.h" +#include "svn_repos.h" +#include "svn_string.h" +#include "svn_dirent_uri.h" +#include "svn_path.h" +#include "svn_time.h" +#include "svn_checksum.h" +#include "svn_props.h" + +#include "dumpr_util.h" + +svn_error_t *open_root(void *edit_baton, + svn_revnum_t base_revision, + apr_pool_t *pool, + void **root_baton) +{ + return SVN_NO_ERROR; +} + +svn_error_t *delete_entry(const char *path, + svn_revnum_t revision, + void *parent_baton, + apr_pool_t *pool) +{ + return SVN_NO_ERROR; +} + +svn_error_t *add_directory(const char *path, + void *parent_baton, + const char *copyfrom_path, + svn_revnum_t copyfrom_rev, + apr_pool_t *pool, + void **child_baton) +{ + return SVN_NO_ERROR; +} + +svn_error_t *open_directory(const char *path, + void *parent_baton, + svn_revnum_t base_revision, + apr_pool_t *pool, + void **child_baton) +{ + return SVN_NO_ERROR; +} + +svn_error_t *close_directory(void *dir_baton, + apr_pool_t *pool) +{ + return SVN_NO_ERROR; +} + +svn_error_t *add_file(const char *path, + void *parent_baton, + const char *copyfrom_path, + svn_revnum_t copyfrom_rev, + apr_pool_t *pool, + void **file_baton) +{ + return SVN_NO_ERROR; +} + +svn_error_t *open_file(const char *path, + void *parent_baton, + svn_revnum_t ancestor_revision, + apr_pool_t *pool, + void **file_baton) +{ + return SVN_NO_ERROR; +} + +svn_error_t *change_dir_prop(void *parent_baton, + const char *name, + const svn_string_t *value, + apr_pool_t *pool) +{ + return SVN_NO_ERROR; +} + +svn_error_t *change_file_prop(void *file_baton, + const char *name, + const svn_string_t *value, + apr_pool_t *pool) +{ + return SVN_NO_ERROR; +} + +svn_error_t *apply_textdelta(void *file_baton, const char *base_checksum, + apr_pool_t *pool, + svn_txdelta_window_handler_t *handler, + void **handler_baton) +{ + return SVN_NO_ERROR; +} + +svn_error_t *close_file(void *file_baton, + const char *text_checksum, + apr_pool_t *pool) +{ + return SVN_NO_ERROR; +} + +svn_error_t *close_edit(void *edit_baton, apr_pool_t *pool) +{ + return SVN_NO_ERROR; +} + +svn_error_t *get_dump_editor(const svn_delta_editor_t **editor, + void **edit_baton, + svn_revnum_t from_rev, + apr_pool_t *pool) +{ + struct edit_baton *eb = apr_pcalloc(pool, sizeof(struct edit_baton)); + eb->current_rev = from_rev; + SVN_ERR(svn_stream_for_stdout(&(eb->stream), pool)); + svn_delta_editor_t *de = svn_delta_default_editor(pool); + + de->open_root = open_root; + de->delete_entry = delete_entry; + de->add_directory = add_directory; + de->open_directory = open_directory; + de->close_directory = close_directory; + de->change_dir_prop = change_dir_prop; + de->change_file_prop = change_file_prop; + de->apply_textdelta = apply_textdelta; + de->add_file = add_file; + de->open_file = open_file; + de->close_file = close_file; + de->close_edit = close_edit; + + /* Set the edit_baton and editor */ + *edit_baton = eb; + *editor = de; + + return SVN_NO_ERROR; +} + diff --git a/dump_editor.h b/dump_editor.h new file mode 100644 index 0000000..9c70b74 --- /dev/null +++ b/dump_editor.h @@ -0,0 +1,8 @@ +#ifndef DUMP_EDITOR_H_ +#define DUMP_EDITOR_H_ + +svn_error_t *get_dump_editor(const svn_delta_editor_t **editor, + void **edit_baton, + svn_revnum_t to_rev, + apr_pool_t *pool); +#endif diff --git a/dumpr_util.h b/dumpr_util.h new file mode 100644 index 0000000..d206c19 --- /dev/null +++ b/dumpr_util.h @@ -0,0 +1,29 @@ +#ifndef DUMPR_UTIL_H_ +#define DUMPR_UTIL_H_ + +struct edit_baton { + /* The stream to dump to: stdout */ + svn_stream_t *stream; + + /* pool is for per-edit-session allocations */ + apr_pool_t *pool; + + svn_revnum_t current_rev; + + /* Store the properties that changed */ + apr_hash_t *properties; + apr_hash_t *del_properties; /* Value is always 0x1 */ + svn_stringbuf_t *propstring; + + /* Path of changed file */ + const char *changed_path; + + /* Was a copy command issued? */ + svn_boolean_t is_copy; + + /* Temporary file to write delta to along with its checksum */ + char *temp_filepath; + svn_checksum_t *checksum; +}; + +#endif -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html