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);