On Thu, Apr 21, 2011 at 10:00 AM, Julian Foad <julian.f...@wandisco.com> wrote: > This is a post-1.7 RFC. > > Most libsvn_client APIs allow the caller to throw either URLs or working > copy paths at the API and then it just does the right thing. But does > this paradigm make sense for APIs such as this one?
Julian, Does this look reasonable for the API split? -Hyrum [[[ /** * 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. * A @a propval of @c NULL will delete the property. * * 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 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). * * If @a ctx->cancel_func is non-NULL, invoke it passing @a * ctx->cancel_baton at various places during the operation. * * Use @a scratch_pool for all memory allocation. * * @since New in 1.7. */ 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); ]]]