[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [RFC/PATCH] Create a fresh svn_repos_parse_fns3_t

From: Daniel Shahaf <d.s_at_daniel.shahaf.name>
Date: Thu, 19 Aug 2010 10:25:19 +0300

Ramkumar Ramachandra wrote on Thu, Aug 19, 2010 at 11:12:14 +0530:
> Hi,
>
> I sent a patch a while ago for svn_repos_parse_dumpstream3. While I
> wait for approval, this is an RFC patch describing my future plan once
> that patch gets approved. It can be described tersely as "While at it
> (adding the new callback), fix everything that's wrong with the
> struct". I'm planning to fix a few other things as well, but this is
> the basic sketch. See load_editor.c for the usecase- I actually
> stuffed a scratch pool into the parse_baton so I could use it
> everywhere.
>
> -- Ram

I derived the diff between the existing/proposed structs. I think this
form of the RFC will be easier to review:

[[[
--- svn_repos_parse_fns2_t 2010-08-19 10:23:09.000000000 +0300
+++ svn_repos_parse_fns3_t 2010-08-19 10:23:08.000000000 +0300
@@ -1,10 +1,20 @@
 /**
- * A vtable that is driven by svn_repos_parse_dumpstream2().
+ * A vtable that is driven by svn_repos_parse_dumpstream3().
  *
- * @since New in 1.1.
+ * @since New in 1.7.
  */
-typedef struct svn_repos_parse_fns2_t
+typedef struct svn_repos_parse_fns3_t
 {
+ /** The parser has parsed the version information from header of
+ * the dumpsteeam within the parsing session represented by
+ * @parse_baton. The version information is available in @a
+ * version, and a scratch pool @a pool is available for any
+ * temporary allocations.
+ */
+ svn_error_t *(*dumpstream_version_record)(int version,
+ void *parse_baton,
+ apr_pool_t *pool);
+
   /** The parser has discovered a new revision record within the
    * parsing session represented by @a parse_baton. All the headers are
    * placed in @a headers (allocated in @a pool), which maps <tt>const
@@ -36,21 +46,34 @@
                                   void *revision_baton,
                                   apr_pool_t *pool);
 
- /** For a given @a revision_baton, set a property @a name to @a value. */
+ /** For a given @a revision_baton, set a property @a name to @a
+ * value. Scratch pool @a pool is available for any temporary
+ * allocations.
+ */
   svn_error_t *(*set_revision_property)(void *revision_baton,
                                         const char *name,
- const svn_string_t *value);
+ const svn_string_t *value,
+ apr_pool_t *pool);
 
- /** For a given @a node_baton, set a property @a name to @a value. */
+ /** For a given @a node_baton, set a property @a name to @a
+ * value. Scratch pool @a pool is available for any temporary
+ * allocations.
+ */
   svn_error_t *(*set_node_property)(void *node_baton,
                                     const char *name,
- const svn_string_t *value);
-
- /** For a given @a node_baton, delete property @a name. */
- svn_error_t *(*delete_node_property)(void *node_baton, const char *name);
+ const svn_string_t *value,
+ apr_pool_t *pool);
 
- /** For a given @a node_baton, remove all properties. */
- svn_error_t *(*remove_node_props)(void *node_baton);
+ /** For a given @a node_baton, delete property @a name. Scratch pool
+ * @a pool is available for any temporary allocations.
+ */
+ svn_error_t *(*delete_node_property)(void *node_baton,
+ const char *name,
+ apr_pool_t *pool);
+
+ /** For a given @a node_baton, remove all properties. Scratch pool
+ @a pool is available for any temporary allocations. */
+ svn_error_t *(*remove_node_props)(void *node_baton, apr_pool_t *pool);
 
   /** For a given @a node_baton, receive a writable @a stream capable of
    * receiving the node's fulltext. After writing the fulltext, call
@@ -59,9 +82,12 @@
    * If a @c NULL is returned instead of a stream, the vtable is
    * indicating that no text is desired, and the parser will not
    * attempt to send it.
+ *
+ * Scratch pool @a pool is available for any temporary allocations.
    */
   svn_error_t *(*set_fulltext)(svn_stream_t **stream,
- void *node_baton);
+ void *node_baton,
+ apr_pool_t *pool);
 
   /** For a given @a node_baton, set @a handler and @a handler_baton
    * to a window handler and baton capable of receiving a delta
@@ -71,21 +97,26 @@
    * If a @c NULL is returned instead of a handler, the vtable is
    * indicating that no delta is desired, and the parser will not
    * attempt to send it.
+ *
+ * Scratch pool @a pool is available for any temporary allocations.
    */
   svn_error_t *(*apply_textdelta)(svn_txdelta_window_handler_t *handler,
                                   void **handler_baton,
- void *node_baton);
+ void *node_baton,
+ apr_pool_t *pool);
 
   /** The parser has reached the end of the current node represented by
- * @a node_baton, it can be freed.
+ * @a node_baton, it can be freed. Scratch pool @a pool is available
+ * for any temporary allocations.
    */
- svn_error_t *(*close_node)(void *node_baton);
+ svn_error_t *(*close_node)(void *node_baton, apr_pool_t *pool);
 
   /** The parser has reached the end of the current revision
    * represented by @a revision_baton. In other words, there are no more
- * changed nodes within the revision. The baton can be freed.
+ * changed nodes within the revision. The baton can be
+ * freed. Scratch pool @a pool is available for any temporary
+ * allocations.
    */
- svn_error_t *(*close_revision)(void *revision_baton);
-
-} svn_repos_parse_fns2_t;
+ svn_error_t *(*close_revision)(void *revision_baton, apr_pool_t *pool);
 
+} svn_repos_parse_fns3_t;
]]]
Received on 2010-08-19 09:28:12 CEST

This is an archived mail posted to the Subversion Dev mailing list.