> -----Original Message-----
> From: s...@apache.org [mailto:s...@apache.org]
> Sent: vrijdag 5 september 2014 12:31
> To: comm...@subversion.apache.org
> Subject: svn commit: r1622678 - in /subversion/branches/log-message-
> templates/subversion: include/ libsvn_client/ svn/
> 
> Author: stsp
> Date: Fri Sep  5 10:31:11 2014
> New Revision: 1622678
> 
> URL: http://svn.apache.org/r1622678
> Log:
> On the log-message-templates branch, rework the way log templates
> are passed to client API consumers.
> 
> Before this change, the template texts were passed as part of the
> svn_client_commit_item3_t structure, duplicating the template text
> for each item. The API consumer was forced to loop over all commit
> items to correlate templates which apply to multiple commit items.
> Log message templates were collected during commit harvesting.
> 
> Now, the templates are passed as an additional argument to the client's
> log message callback (svn_client_get_commit_log4_t). Each template has
> associated with it a list of pointers to commit items which the template
> applies to. The templates are collected during an extra post-processing
> step after commit harvesting and only for consumers of the new API.
> 
> * subversion/include/svn_client.h
>   (svn_client_commit_item3_t): Remove log_msg_template field.
>   (svn_client_get_commit_log4_t): Revision of
> svn_client_get_commit_log3_t
>    which takes a log_message_templates parameter.
>   (svn_client_get_commit_log3_t): Deprecate.
>   (svn_client_ctx_t): Add log_msg_func4 and log_msg_baton4 and
>    deprecate log_msg_func3.
> 
> * subversion/libsvn_client/client.h
>   (SVN_CLIENT__HAS_LOG_MSG_FUNC): Update for log_msg_func4.
> 
> * subversion/libsvn_client/commit_util.c
>   (add_committable, harvest_not_present_for_copy,
> harvest_status_callback,
>    handle_descendants): Remove now obsolete support for log message
> templates.
>   (get_log_msg_template): Rename to ...
>   (get_log_message_templates): ... this. Return a collection of templates
>    which are associated with the commit items they apply to.
>   (svn_client__get_log_msg): Collect log message templates if the client API
>    user is providing a svn_client_get_commit_log4_t log message function.
> 
> * subversion/svn/cl.h
>    (svn_cl__get_log_message): This is now an implementation of
>     svn_client_get_commit_log4_t.
> 
> * subversion/svn/commit-cmd.c
>   (svn_cl__commit): Use ctx->log_msg_baton4 instead of ctx-
> >log_msg_baton3.
> 
> * subversion/svn/copy-cmd.c
>   (svn_cl__copy): Use ctx->log_msg_baton4 instead of ctx->log_msg_baton3.
> 
> * subversion/svn/delete-cmd.c
>   (svn_cl__delete): Use ctx->log_msg_baton4 instead of ctx-
> >log_msg_baton3.
> 
> * subversion/svn/import-cmd.c
>   (svn_cl__import): Use ctx->log_msg_baton4 instead of ctx-
> >log_msg_baton3.
> 
> * subversion/svn/mkdir-cmd.c
>   (svn_cl__mkdir): Use ctx->log_msg_baton4 instead of ctx-
> >log_msg_baton3.
> 
> * subversion/svn/move-cmd.c
>   (svn_cl__move): Use ctx->log_msg_baton4 instead of ctx-
> >log_msg_baton3.
> 
> * subversion/svn/propedit-cmd.c
>   (svn_cl__propedit): Use ctx->log_msg_baton4 instead of ctx-
> >log_msg_baton3.
> 
> * subversion/svn/svn.c
>   (sub_main): Use ctx->log_msg_func4 instead of ctx->log_msg_func3.
> 
> * subversion/svn/util.c
>   (svn_cl__get_log_message): Implement the svn_client_get_commit_log4_t
>    interface. Provide the same behaviour as get_log_message_template().
>   (get_log_message_template): Remove.
> 
> Modified:
>     subversion/branches/log-message-
> templates/subversion/include/svn_client.h
>     subversion/branches/log-message-
> templates/subversion/libsvn_client/client.h
>     subversion/branches/log-message-
> templates/subversion/libsvn_client/commit_util.c
>     subversion/branches/log-message-templates/subversion/svn/cl.h
>     subversion/branches/log-message-templates/subversion/svn/commit-
> cmd.c
>     subversion/branches/log-message-templates/subversion/svn/copy-cmd.c
>     subversion/branches/log-message-templates/subversion/svn/delete-
> cmd.c
>     subversion/branches/log-message-templates/subversion/svn/import-
> cmd.c
>     subversion/branches/log-message-templates/subversion/svn/mkdir-
> cmd.c
>     subversion/branches/log-message-templates/subversion/svn/move-
> cmd.c
>     subversion/branches/log-message-templates/subversion/svn/propedit-
> cmd.c
>     subversion/branches/log-message-templates/subversion/svn/svn.c
>     subversion/branches/log-message-templates/subversion/svn/util.c
> 
> Modified: subversion/branches/log-message-
> templates/subversion/include/svn_client.h
> URL: http://svn.apache.org/viewvc/subversion/branches/log-message-
> templates/subversion/include/svn_client.h?rev=1622678&r1=1622677&r2=1
> 622678&view=diff
> ==========================================================
> ====================
> --- subversion/branches/log-message-
> templates/subversion/include/svn_client.h (original)
> +++ subversion/branches/log-message-
> templates/subversion/include/svn_client.h Fri Sep  5 10:31:11 2014
> @@ -528,13 +528,6 @@ typedef struct svn_client_commit_item3_t
>     */
>    const char *moved_from_abspath;
> 
> -  /** Log message template associated with this item (if any; NULL
> -   * otherwise).
> -   *
> -   * @since New in 1.9.
> -   */
> -  const svn_string_t *log_msg_template;
> -
>  } svn_client_commit_item3_t;
> 
>  /** The commit candidate structure.
> @@ -660,11 +653,31 @@ svn_client_commit_item2_dup(const svn_cl
>   * structures, which may be fully or only partially filled-in,
>   * depending on the type of commit operation.
>   *
> + * @a log_message_templates is a hash table containing one or more log
> + * message templates obtained from svn:log-message properties applicable
> + * to @a commit_items. It is @c NULL if no log message template is defined.
> + * The table is keyed by 'const char *' log templates. Its values are
> + * apr_array_header_t * arrays which contain pointers to those commit
> + * items (from @a commit_items) which the log template applies to.
> + *
>   * @a baton is provided along with the callback for use by the handler.
>   *
>   * All allocations should be performed in @a pool.
>   *
> + * @since New in 1.9.
> + */
> +typedef svn_error_t *(*svn_client_get_commit_log4_t)(
> +  const char **log_msg,
> +  const char **tmp_file,
> +  const apr_array_header_t *commit_items,
> +  const apr_hash_t * log_message_templates,
> +  void *baton,
> +  apr_pool_t *pool);

Why do we need a tmp file in the api? GUI clients in general don't need/want a 
temp file.

This looks like you are trying to implement 'svn' behavior in the svn_client 
layer.

I don't see why the tmp_file can't be passed via the baton... if needed by 
wrapping one baton in another at some helper function layer.

The documentation you added doesn't document tmp_file and the documentation for 
log_message_templates doesn't explain what it does.


E.g. If I'm committing changes to "C:\inetpub\wwwroot\some-file.aspx" and 
"F:\projects\libraries\some-file.c" what can I expect here?

The nodes are certainly not in the same working copy, but can be from the same 
repository and as such committed to a single revision. What keys can I expect 
in log_message_templates. (Which can't be const, as there are no apis that can 
consume const apr_hash_t * :( )... and what values?

Currently I would read the documentation as const char * "<template>" mapping 
to 'commit items'... But an apr_hash_t has a one to one relation, so it could 
only point to one.

        Bert

Reply via email to