On 9/29/06, David Glasser <glasser@mit.edu> wrote:
> I'm specifically proposing the following API change. What do folks
> think?
The previous API change wouldn't be good enough, since it'll need to
return an svn_commit_info_t as well. (Should I explicitly state that
passing in NULL for commit_info_p is OK if the target isn't an URL?)
There's also some validation and canonicalization in svn_wc_prop_set2
that need to be factored out into libsvn_subr or something. Some of
this is easy (don't set svn:ignore on files, strip whitespace around
svn:keywords). Some of it... less so: there's a check that a
svn:eol-style is reasonable, and a full-blown attempt to parse
svn:externals with svn_wc_parse_externals_description2 (which doesn't
take a wc_adm_access_t, at least). Dealing with these two might be a
little hairy.
This patch shows my current plan for svn_client_propset3:
--- subversion/include/svn_client.h (revision 21714)
+++ subversion/include/svn_client.h (patch - level 1)
@@ -2086,6 +2086,16 @@
*
* A @a propval of @c NULL will delete the property.
*
+ * The @a target may only be an URL if @a base_revision_for_url is not
+ * @c SVN_INVALID_REVNUM; in this case, the property will only be set
+ * if it has not changed since revision @a base_revision_for_url. @a
+ * base_revision_for_url must be @c SVN_INVALID_REVNUM if @a target is
+ * not an URL. @a recurse is not supported on URLs. The
+ * authentication baton in @a ctx and @a ctx->log_msg_func/@a
+ * ctx->log_msg_baton will be used to immediately attempt to commit
+ * the property change in the repository. If the commit succeeds,
+ * allocate (in @a pool) and populate @a *commit_info_p.
+ *
* If @a propname is an svn-controlled property (i.e. prefixed with
* @c SVN_PROP_PREFIX), then the caller is responsible for ensuring that
* the value is UTF8-encoded and uses LF line-endings.
@@ -2102,9 +2112,26 @@
*
* Use @a pool for all memory allocation.
*
- * @since New in 1.2.
+ * @since New in 1.5.
*/
svn_error_t *
+svn_client_propset3(svn_commit_info_t **commit_info_p,
+ const char *propname,
+ const svn_string_t *propval,
+ const char *target,
+ svn_boolean_t recurse,
+ svn_boolean_t skip_checks,
+ svn_revnum_t base_revision_for_url,
+ svn_client_ctx_t *ctx,
+ apr_pool_t *pool);
+
+/**
+ * Like svn_client_propset2(), but with @a base_revision_for_url
+ * always @c SVN_INVALID_REVNUM, and @a commit_info_p always NULL.
+ *
+ * @deprecated Provided for backward compatibility with the 1.4 API.
+ */
+svn_error_t *
svn_client_propset2(const char *propname,
const svn_string_t *propval,
const char *target,
--
David Glasser | glasser_at_mit.edu | http://www.davidglasser.net/
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Fri Sep 29 19:43:56 2006