You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by hw...@apache.org on 2011/04/21 22:02:31 UTC
svn commit: r1095802 - in /subversion/trunk/subversion: include/svn_client.h
libsvn_client/deprecated.c libsvn_client/prop_commands.c svn/propdel-cmd.c
svn/propedit-cmd.c svn/propset-cmd.c
Author: hwright
Date: Thu Apr 21 20:02:31 2011
New Revision: 1095802
URL: http://svn.apache.org/viewvc?rev=1095802&view=rev
Log:
Split the client propset API into two APIs, one for working copy actions,
and one for repository actions. See thread here:
http://svn.haxx.se/dev/archive-2011-04/0338.shtml
* subversion/svn/propdel-cmd.c
(svn_cl__propdel): Update caller.
* subversion/svn/propset-cmd.c
(svn_cl__propset): Same.
* subversion/svn/propedit-cmd.c
(svn_cl__propedit): Same.
* subversion/libsvn_client/deprecated.c
(svn_client_propset3): Same.
* subversion/include/svn_client.h
(svn_client_propset_local, svn_client_propset_remote): New.
(svn_client_propset4): Remove.
(svn_client_propset3): Update docs.
* subversion/libsvn_client/prop_commands.c
(svn_client_propset4): Split into...
(svn_client_propset_local): ...this, and ...
(svn_client_propset_remote): ...this.
Modified:
subversion/trunk/subversion/include/svn_client.h
subversion/trunk/subversion/libsvn_client/deprecated.c
subversion/trunk/subversion/libsvn_client/prop_commands.c
subversion/trunk/subversion/svn/propdel-cmd.c
subversion/trunk/subversion/svn/propedit-cmd.c
subversion/trunk/subversion/svn/propset-cmd.c
Modified: subversion/trunk/subversion/include/svn_client.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_client.h?rev=1095802&r1=1095801&r2=1095802&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_client.h (original)
+++ subversion/trunk/subversion/include/svn_client.h Thu Apr 21 20:02:31 2011
@@ -4115,50 +4115,68 @@ svn_client_move(svn_client_commit_info_t
/**
+ * Set @a propname to @a propval on @a url. A @a propval of @c NULL will
+ * delete the property.
+ *
+ * Immediately attempt to commit the property change in the repository,
+ * using the authentication baton in @a ctx and @a
+ * ctx->log_msg_func3/@a ctx->log_msg_baton3.
+ *
+ * If the property has changed on @a url since revision
+ * @a base_revision_for_url (which must not be #SVN_INVALID_REVNUM), no
+ * change will be made and an error will be returned.
+ *
+ * If non-NULL, @a revprop_table is a hash table holding additional,
+ * custom revision properties (<tt>const char *</tt> names mapped to
+ * <tt>svn_string_t *</tt> values) to be set on the new revision. This
+ * table cannot contain any standard Subversion properties.
+ *
+ * If @a commit_callback is non-NULL, then call @a commit_callback with
+ * @a commit_baton and a #svn_commit_info_t for the commit.
+ *
+ * If @a propname is an svn-controlled property (i.e. prefixed with
+ * #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
+ * the value is UTF8-encoded and uses LF line-endings.
+ *
+ * If @a skip_checks is TRUE, do no validity checking. But if @a
+ * skip_checks is FALSE, and @a propname is not a valid property for @a
+ * targets, return an error, either #SVN_ERR_ILLEGAL_TARGET (if the
+ * property is not appropriate for @a targets), or
+ * #SVN_ERR_BAD_MIME_TYPE (if @a propname is "svn:mime-type", but @a
+ * propval is not a valid mime-type).
+ *
+ * Use @a scratch_pool for all memory allocation.
+ *
+ * @since New in 1.7.
+ */
+svn_error_t *
+svn_client_propset_remote(const char *propname,
+ const svn_string_t *propval,
+ const char *url,
+ svn_boolean_t skip_checks,
+ svn_revnum_t base_revision_for_url,
+ const apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
+
+/**
* Set @a propname to @a propval on each (const char *) target in @a
- * targets. The targets must be either all working copy paths or all URLs.
+ * targets. The targets must be either all working copy paths.
* A @a propval of @c NULL will delete the property.
*
- * If @a targets are URLs:
- *
- * - Immediately attempt to commit the property change in the repository,
- * using the authentication baton in @a ctx and @a
- * ctx->log_msg_func3/@a ctx->log_msg_baton3.
- * @note ### Currently a separate commit for each target. TODO: single commit.
- *
- * - If the property has changed on any target since revision
- * @a base_revision_for_url (which must not be #SVN_INVALID_REVNUM), no
- * change will be made and an error will be returned.
- * @note ### Currently processes targets in order, committing if successful,
- * stopping when one hits this error. TODO: commit all or none.
- *
- * - If non-NULL, @a revprop_table is a hash table holding additional,
- * custom revision properties (<tt>const char *</tt> names mapped to
- * <tt>svn_string_t *</tt> values) to be set on the new revision. This
- * table cannot contain any standard Subversion properties.
- *
- * - If @a commit_callback is non-NULL, then for each successful commit,
- * call @a commit_callback with @a commit_baton and a #svn_commit_info_t
- * for the commit.
- *
- * - @a depth must be #svn_depth_empty. @a changelists is ignored.
- *
- * If @a targets are working copy paths:
- *
- * - If @a depth is #svn_depth_empty, set the property on each member of
- * @a targets only; if #svn_depth_files, set it on @a targets and their
- * file children (if any); if #svn_depth_immediates, on @a targets and all
- * of their immediate children (both files and directories); if
- * #svn_depth_infinity, on @a targets and everything beneath them.
- *
- * - @a changelists is an array of <tt>const char *</tt> changelist
- * names, used as a restrictive filter on items whose properties are
- * set; that is, don't set properties on any item unless it's a member
- * of one of those changelists. If @a changelists is empty (or
- * altogether @c NULL), no changelist filtering occurs.
+ * If @a depth is #svn_depth_empty, set the property on each member of
+ * @a targets only; if #svn_depth_files, set it on @a targets and their
+ * file children (if any); if #svn_depth_immediates, on @a targets and all
+ * of their immediate children (both files and directories); if
+ * #svn_depth_infinity, on @a targets and everything beneath them.
*
- * - @a base_revision_for_url must be #SVN_INVALID_REVNUM. @a revprop_table,
- * @a commit_callback and @a commit_baton are ignored.
+ * @a changelists is an array of <tt>const char *</tt> changelist
+ * names, used as a restrictive filter on items whose properties are
+ * set; that is, don't set properties on any item unless it's a member
+ * of one of those changelists. If @a changelists is empty (or
+ * altogether @c NULL), no changelist filtering occurs.
*
* If @a propname is an svn-controlled property (i.e. prefixed with
* #SVN_PROP_PREFIX), then the caller is responsible for ensuring that
@@ -4174,26 +4192,23 @@ svn_client_move(svn_client_commit_info_t
* If @a ctx->cancel_func is non-NULL, invoke it passing @a
* ctx->cancel_baton at various places during the operation.
*
- * Use @a pool for all memory allocation.
+ * Use @a scratch_pool for all memory allocation.
*
* @since New in 1.7.
*/
svn_error_t *
-svn_client_propset4(const char *propname,
- const svn_string_t *propval,
- const apr_array_header_t *targets,
- svn_depth_t depth,
- svn_boolean_t skip_checks,
- svn_revnum_t base_revision_for_url,
- const apr_array_header_t *changelists,
- const apr_hash_t *revprop_table,
- svn_commit_callback2_t commit_callback,
- void *commit_baton,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool);
+svn_client_propset_local(const char *propname,
+ const svn_string_t *propval,
+ const apr_array_header_t *targets,
+ svn_depth_t depth,
+ svn_boolean_t skip_checks,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool);
/**
- * Similar to svn_client_propset4(), but takes only a single target, and
+ * An amalgamation of svn_client_propset_local() and
+ * svn_client_propset_remote() that takes only a single target, and
* returns the @a commit_info_p directly rather than through a callback.
*
* @since New in 1.5.
Modified: subversion/trunk/subversion/libsvn_client/deprecated.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/deprecated.c?rev=1095802&r1=1095801&r2=1095802&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/deprecated.c (original)
+++ subversion/trunk/subversion/libsvn_client/deprecated.c Thu Apr 21 20:02:31 2011
@@ -1535,17 +1535,25 @@ svn_client_propset3(svn_commit_info_t **
svn_client_ctx_t *ctx,
apr_pool_t *pool)
{
- struct capture_baton_t cb;
- apr_array_header_t *targets = apr_array_make(pool, 1, sizeof(const char *));
+ if (svn_path_is_url(target))
+ {
+ struct capture_baton_t cb = { commit_info_p, pool };
- APR_ARRAY_PUSH(targets, const char *) = target;
+ SVN_ERR(svn_client_propset_remote(propname, propval, target, skip_checks,
+ base_revision_for_url, revprop_table,
+ capture_commit_info, &cb, ctx, pool));
+ }
+ else
+ {
+ apr_array_header_t *targets = apr_array_make(pool, 1,
+ sizeof(const char *));
- cb.info = commit_info_p;
- cb.pool = pool;
+ APR_ARRAY_PUSH(targets, const char *) = target;
+ SVN_ERR(svn_client_propset_local(propname, propval, targets, depth,
+ skip_checks, changelists, ctx, pool));
+ }
- return svn_client_propset4(propname, propval, targets, depth, skip_checks,
- base_revision_for_url, changelists, revprop_table,
- capture_commit_info, &cb, ctx, pool);
+ return SVN_NO_ERROR;
}
svn_error_t *
Modified: subversion/trunk/subversion/libsvn_client/prop_commands.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/prop_commands.c?rev=1095802&r1=1095801&r2=1095802&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/prop_commands.c (original)
+++ subversion/trunk/subversion/libsvn_client/prop_commands.c Thu Apr 21 20:02:31 2011
@@ -341,30 +341,10 @@ set_props_cb(void *baton,
return SVN_NO_ERROR;
}
-svn_error_t *
-svn_client_propset4(const char *propname,
- const svn_string_t *propval,
- const apr_array_header_t *targets,
- svn_depth_t depth,
- svn_boolean_t skip_checks,
- svn_revnum_t base_revision_for_url,
- const apr_array_header_t *changelists,
- const apr_hash_t *revprop_table,
- svn_commit_callback2_t commit_callback,
- void *commit_baton,
- svn_client_ctx_t *ctx,
- apr_pool_t *pool)
+static svn_error_t *
+check_prop_name(const char *propname,
+ const svn_string_t *propval)
{
- svn_boolean_t targets_are_urls;
- int i;
-
- if (targets->nelts == 0)
- return SVN_NO_ERROR;
-
- /* Check for homogeneity among our targets. */
- targets_are_urls = svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *));
- SVN_ERR(svn_client__assert_homogeneous_target_type(targets));
-
/* Since Subversion controls the "svn:" property namespace, we
don't honor the 'skip_checks' flag here. Unusual property
combinations, like svn:eol-style with a non-text svn:mime-type,
@@ -381,111 +361,143 @@ svn_client_propset4(const char *propname
return svn_error_createf(SVN_ERR_CLIENT_PROPERTY_NAME, NULL,
_("Bad property name: '%s'"), propname);
- if (targets_are_urls)
- {
- /* The rationale for requiring the base_revision_for_url
- argument is that without it, it's too easy to possibly
- overwrite someone else's change without noticing. (See also
- tools/examples/svnput.c). */
- if (! SVN_IS_VALID_REVNUM(base_revision_for_url))
- return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
- _("Setting property on non-local targets "
- "needs a base revision"));
-
- if (depth > svn_depth_empty)
- return svn_error_create(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Setting property recursively on non-local "
- "targets is not supported"));
-
- /* ### When you set svn:eol-style or svn:keywords on a wc file,
- ### Subversion sends a textdelta at commit time to properly
- ### normalize the file in the repository. If we want to
- ### support editing these properties on URLs, then we should
- ### generate the same textdelta; for now, we won't support
- ### editing these properties on URLs. (Admittedly, this
- ### means that all the machinery with get_file_for_validation
- ### is unused.)
- */
- if ((strcmp(propname, SVN_PROP_EOL_STYLE) == 0) ||
- (strcmp(propname, SVN_PROP_KEYWORDS) == 0))
- return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
- _("Setting property '%s' on non-local "
- "targets is not supported"), propname);
+ return SVN_NO_ERROR;
+}
- for (i = 0; i < targets->nelts; i++)
- {
- const char *target = APR_ARRAY_IDX(targets, i, const char *);
+svn_error_t *
+svn_client_propset_local(const char *propname,
+ const svn_string_t *propval,
+ const apr_array_header_t *targets,
+ svn_depth_t depth,
+ svn_boolean_t skip_checks,
+ const apr_array_header_t *changelists,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ apr_hash_t *changelist_hash = NULL;
+ apr_pool_t *iterpool = svn_pool_create(scratch_pool);
+ svn_boolean_t targets_are_urls;
+ int i;
- SVN_ERR(propset_on_url(propname, propval, target, skip_checks,
- base_revision_for_url, revprop_table,
- commit_callback, commit_baton, ctx, pool));
- }
+ if (targets->nelts == 0)
+ return SVN_NO_ERROR;
- return SVN_NO_ERROR;
- }
- else
- {
- apr_hash_t *changelist_hash = NULL;
- apr_pool_t *iterpool = svn_pool_create(pool);
+ /* Check for homogeneity among our targets. */
+ targets_are_urls = svn_path_is_url(APR_ARRAY_IDX(targets, 0, const char *));
+ SVN_ERR(svn_client__assert_homogeneous_target_type(targets));
- if (changelists && changelists->nelts)
- SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash,
- changelists, pool));
+ if (targets_are_urls)
+ return svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Targets must be URLs"));
- for (i = 0; i < targets->nelts; i++)
- {
- svn_node_kind_t kind;
- const char *target_abspath;
- svn_error_t *err;
- struct set_props_baton baton;
- const char *target = APR_ARRAY_IDX(targets, i, const char *);
+ SVN_ERR(check_prop_name(propname, propval));
- svn_pool_clear(iterpool);
+ if (changelists && changelists->nelts)
+ SVN_ERR(svn_hash_from_cstring_keys(&changelist_hash,
+ changelists, scratch_pool));
+
+ for (i = 0; i < targets->nelts; i++)
+ {
+ svn_node_kind_t kind;
+ const char *target_abspath;
+ svn_error_t *err;
+ struct set_props_baton baton;
+ const char *target = APR_ARRAY_IDX(targets, i, const char *);
- /* Check for cancellation */
- if (ctx->cancel_func)
- SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
+ svn_pool_clear(iterpool);
- SVN_ERR(svn_dirent_get_absolute(&target_abspath, target, iterpool));
+ /* Check for cancellation */
+ if (ctx->cancel_func)
+ SVN_ERR(ctx->cancel_func(ctx->cancel_baton));
- err = svn_wc_read_kind(&kind, ctx->wc_ctx, target_abspath, FALSE,
- iterpool);
+ SVN_ERR(svn_dirent_get_absolute(&target_abspath, target, iterpool));
- if ((err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
- || kind == svn_node_unknown || kind == svn_node_none)
- {
- if (ctx->notify_func2)
- {
- svn_wc_notify_t *notify = svn_wc_create_notify(
- target_abspath,
- svn_wc_notify_path_nonexistent,
- iterpool);
+ err = svn_wc_read_kind(&kind, ctx->wc_ctx, target_abspath, FALSE,
+ iterpool);
- ctx->notify_func2(ctx->notify_baton2, notify, iterpool);
- }
+ if ((err && err->apr_err == SVN_ERR_WC_PATH_NOT_FOUND)
+ || kind == svn_node_unknown || kind == svn_node_none)
+ {
+ if (ctx->notify_func2)
+ {
+ svn_wc_notify_t *notify = svn_wc_create_notify(
+ target_abspath,
+ svn_wc_notify_path_nonexistent,
+ iterpool);
- svn_error_clear(err);
+ ctx->notify_func2(ctx->notify_baton2, notify, iterpool);
}
- else
- SVN_ERR(err);
- baton.ctx = ctx;
- baton.local_abspath = target_abspath;
- baton.depth = depth;
- baton.kind = kind;
- baton.propname = propname;
- baton.propval = propval;
- baton.skip_checks = skip_checks;
- baton.changelist_hash = changelist_hash;
-
- SVN_ERR(svn_wc__call_with_write_lock(set_props_cb, &baton,
- ctx->wc_ctx, target_abspath,
- FALSE, iterpool, iterpool));
+ svn_error_clear(err);
}
- svn_pool_destroy(iterpool);
+ else
+ SVN_ERR(err);
- return SVN_NO_ERROR;
+ baton.ctx = ctx;
+ baton.local_abspath = target_abspath;
+ baton.depth = depth;
+ baton.kind = kind;
+ baton.propname = propname;
+ baton.propval = propval;
+ baton.skip_checks = skip_checks;
+ baton.changelist_hash = changelist_hash;
+
+ SVN_ERR(svn_wc__call_with_write_lock(set_props_cb, &baton,
+ ctx->wc_ctx, target_abspath,
+ FALSE, iterpool, iterpool));
}
+ svn_pool_destroy(iterpool);
+
+ return SVN_NO_ERROR;
+}
+
+svn_error_t *
+svn_client_propset_remote(const char *propname,
+ const svn_string_t *propval,
+ const char *url,
+ svn_boolean_t skip_checks,
+ svn_revnum_t base_revision_for_url,
+ const apr_hash_t *revprop_table,
+ svn_commit_callback2_t commit_callback,
+ void *commit_baton,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *scratch_pool)
+{
+ if (!svn_path_is_url(url))
+ return svn_error_create(SVN_ERR_ILLEGAL_TARGET, NULL,
+ _("Targets must be URLs"));
+
+ SVN_ERR(check_prop_name(propname, propval));
+
+ /* The rationale for requiring the base_revision_for_url
+ argument is that without it, it's too easy to possibly
+ overwrite someone else's change without noticing. (See also
+ tools/examples/svnput.c). */
+ if (! SVN_IS_VALID_REVNUM(base_revision_for_url))
+ return svn_error_create(SVN_ERR_CLIENT_BAD_REVISION, NULL,
+ _("Setting property on non-local targets "
+ "needs a base revision"));
+
+ /* ### When you set svn:eol-style or svn:keywords on a wc file,
+ ### Subversion sends a textdelta at commit time to properly
+ ### normalize the file in the repository. If we want to
+ ### support editing these properties on URLs, then we should
+ ### generate the same textdelta; for now, we won't support
+ ### editing these properties on URLs. (Admittedly, this
+ ### means that all the machinery with get_file_for_validation
+ ### is unused.)
+ */
+ if ((strcmp(propname, SVN_PROP_EOL_STYLE) == 0) ||
+ (strcmp(propname, SVN_PROP_KEYWORDS) == 0))
+ return svn_error_createf(SVN_ERR_UNSUPPORTED_FEATURE, NULL,
+ _("Setting property '%s' on non-local "
+ "targets is not supported"), propname);
+
+ SVN_ERR(propset_on_url(propname, propval, url, skip_checks,
+ base_revision_for_url, revprop_table,
+ commit_callback, commit_baton, ctx, scratch_pool));
+
+ return SVN_NO_ERROR;
}
static svn_error_t *
Modified: subversion/trunk/subversion/svn/propdel-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/propdel-cmd.c?rev=1095802&r1=1095801&r2=1095802&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/propdel-cmd.c (original)
+++ subversion/trunk/subversion/svn/propdel-cmd.c Thu Apr 21 20:02:31 2011
@@ -94,13 +94,9 @@ svn_cl__propdel(apr_getopt_t *os,
opt_state->depth = svn_depth_empty;
/* For each target, remove the property PNAME. */
- SVN_ERR(svn_client_propset4(pname_utf8,
- NULL, targets,
- opt_state->depth,
- FALSE, SVN_INVALID_REVNUM,
- opt_state->changelists, NULL,
- svn_cl__print_commit_info, NULL,
- ctx, pool));
+ SVN_ERR(svn_client_propset_local(pname_utf8, NULL, targets,
+ opt_state->depth, FALSE,
+ opt_state->changelists, ctx, pool));
}
return SVN_NO_ERROR;
Modified: subversion/trunk/subversion/svn/propedit-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/propedit-cmd.c?rev=1095802&r1=1095801&r2=1095802&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/propedit-cmd.c (original)
+++ subversion/trunk/subversion/svn/propedit-cmd.c Thu Apr 21 20:02:31 2011
@@ -287,8 +287,6 @@ svn_cl__propedit(apr_getopt_t *os,
if (edited_propval && !svn_string_compare(propval, edited_propval))
{
svn_error_t *err = SVN_NO_ERROR;
- apr_array_header_t *targs = apr_array_make(subpool, 1,
- sizeof(const char *));
svn_cl__check_boolean_prop_val(pname_utf8, edited_propval->data,
subpool);
@@ -297,13 +295,27 @@ svn_cl__propedit(apr_getopt_t *os,
SVN_ERR(svn_cl__make_log_msg_baton(&(ctx->log_msg_baton3),
opt_state, NULL, ctx->config,
subpool));
+ if (svn_path_is_url(target))
+ {
+ err = svn_client_propset_remote(pname_utf8, edited_propval,
+ target, opt_state->force,
+ base_rev,
+ opt_state->revprop_table,
+ commit_info_handler, &cib,
+ ctx, subpool);
+ }
+ else
+ {
+ apr_array_header_t *targs = apr_array_make(subpool, 1,
+ sizeof(const char *));
+
+ APR_ARRAY_PUSH(targs, const char *) = target;
+ err = svn_client_propset_local(pname_utf8, edited_propval,
+ targs, svn_depth_empty,
+ opt_state->force, NULL,
+ ctx, subpool);
+ }
- APR_ARRAY_PUSH(targs, const char *) = target;
- err = svn_client_propset4(pname_utf8, edited_propval, targs,
- svn_depth_empty, opt_state->force,
- base_rev, NULL, opt_state->revprop_table,
- commit_info_handler, &cib,
- ctx, subpool);
if (ctx->log_msg_func3)
SVN_ERR(svn_cl__cleanup_log_msg(ctx->log_msg_baton3,
err, pool));
Modified: subversion/trunk/subversion/svn/propset-cmd.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/propset-cmd.c?rev=1095802&r1=1095801&r2=1095802&view=diff
==============================================================================
--- subversion/trunk/subversion/svn/propset-cmd.c (original)
+++ subversion/trunk/subversion/svn/propset-cmd.c Thu Apr 21 20:02:31 2011
@@ -169,11 +169,10 @@ svn_cl__propset(apr_getopt_t *os,
}
}
- SVN_ERR(svn_client_propset4(pname_utf8, propval, targets,
- opt_state->depth, opt_state->force,
- SVN_INVALID_REVNUM, opt_state->changelists,
- NULL, svn_cl__print_commit_info, NULL, ctx,
- scratch_pool));
+ SVN_ERR(svn_client_propset_local(pname_utf8, propval, targets,
+ opt_state->depth, opt_state->force,
+ opt_state->changelists, ctx,
+ scratch_pool));
if (! opt_state->quiet)
svn_cl__check_boolean_prop_val(pname_utf8, propval->data, scratch_pool);