Re: [WIP PATCH 1/7] Add skeleton RA svnclient

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ramkumar Ramachandra wrote:

> In future, it will dump the data in every revision
> to stdout in dumpfile format (hopefully) without resorting to the FS
> API.

For now, just some naïve questions.  Warning: I know nothing about
svn internals.

I assume this corresponds to the ra-svn branch of
<http://github.com/artagnon/svn-dump-fast-export.git>.  Has the
relevant code changed much since you sent it?

> --- /dev/null
> +++ b/debug_editor.c
> @@ -0,0 +1,413 @@
> +#include "svn_pools.h"
> +#include "svn_cmdline.h"
> +#include "svn_client.h"
> +#include "svn_ra.h"
> +
> +struct edit_baton

What is a baton?

[...]
> +  void *wrapped_edit_baton;
[...]
> +  void *edit_baton;
> +  void *wrapped_dir_baton;
[...]
> +  void *edit_baton;
> +  void *wrapped_file_baton;

Are these opaque types necessary?

> +
> +static svn_error_t *
> +write_indent(struct edit_baton *eb, apr_pool_t *pool)
> +{
> +  int i;
> +
> +  for (i = 0; i < eb->indent_level; ++i)
> +    SVN_ERR(svn_stream_printf(eb->out, pool, " "));
> +
> +  return SVN_NO_ERROR;
> +}

What does this do?  Is SVN_ERR for debugging?  Where does the output go?

> +static svn_error_t *
> +set_target_revision(void *edit_baton,
> +                    svn_revnum_t target_revision,
> +                    apr_pool_t *pool)
[...]
> +static svn_error_t *
> +open_root(void *edit_baton,
[...]
> +static svn_error_t *
> +close_edit(void *edit_baton,
[...]

I take it these are callbacks?  Is there overview documentation for
them somewhere?

> +svn_error_t *
> +svn_delta__get_debug_editor(const svn_delta_editor_t **editor,
> +                            void **edit_baton,
> +                            const svn_delta_editor_t *wrapped_editor,
> +                            void *wrapped_edit_baton,
> +                            apr_pool_t *pool)
> +{
> +  svn_delta_editor_t *tree_editor = svn_delta_default_editor(pool);
> +  struct edit_baton *eb = apr_palloc(pool, sizeof(*eb));
> +  apr_file_t *errfp;
> +  svn_stream_t *out;
> +
> +  apr_status_t apr_err = apr_file_open_stderr(&errfp, pool);
> +  if (apr_err)
> +    return svn_error_wrap_apr(apr_err, "Problem opening stderr");
> +
> +  out = svn_stream_from_aprfile2(errfp, TRUE, pool);
> +
> +  tree_editor->set_target_revision = set_target_revision;
> +  tree_editor->open_root = open_root;
> +  tree_editor->delete_entry = delete_entry;
> +  tree_editor->add_directory = add_directory;
> +  tree_editor->open_directory = open_directory;
> +  tree_editor->change_dir_prop = change_dir_prop;
> +  tree_editor->close_directory = close_directory;
> +  tree_editor->absent_directory = absent_directory;
> +  tree_editor->add_file = add_file;
> +  tree_editor->open_file = open_file;
> +  tree_editor->apply_textdelta = apply_textdelta;
> +  tree_editor->change_file_prop = change_file_prop;
> +  tree_editor->close_file = close_file;
> +  tree_editor->absent_file = absent_file;
> +  tree_editor->close_edit = close_edit;

I take it that the fields of svn_delta_editor_t do not have a
well-defined order?  Ugh.

In any case, I suspect this would be easier to read rearranged a little:

 1. declarations for callbacks
 2. get_debug_editor implementation
 3. definitions of types not needed in get_debug_editor()
 4. implementations of callbacks

That way, a person reading straight through can figure out what’s
going on a little earlier.

> --- /dev/null
> +++ b/svnclient_ra.c
[...]
> +int main()
> +{
> +	const char url[] = "http://svn.apache.org/repos/asf";;
> +	svn_revnum_t start_revision = 1, end_revision = 5;
> +	if (svn_cmdline_init ("svnclient_ra", stderr) != EXIT_SUCCESS)
> +		return 1;
> +	pool = svn_pool_create(NULL);
> +
> +	SVN_INT_ERR(open_connection(url));
> +	SVN_INT_ERR(replay_range(start_revision, end_revision));
> +
> +	close_connection();
> +	return 0;
> +}

What is svn_cmdline_init?  Is this code destined for inclusion in svn
upstream, and if so, where can one find the surrounding code this
should fit in with?

Jonathan
--
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


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]