You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by Apache subversion Wiki <co...@subversion.apache.org> on 2012/02/01 02:19:16 UTC
[Subversion Wiki] Update of "InheritedProperties" by pburba
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Subversion Wiki" for change notification.
The "InheritedProperties" page has been changed by pburba:
http://wiki.apache.org/subversion/InheritedProperties?action=diff&rev1=10&rev2=11
Comment:
Tweak suggested new APIs to allow retrieval of explicit and/or inherited properties.
bar
}}}
== API Changes ==
- Rev svn_client_proplist3 to svn_client_proplist4, adding the svn_boolean_t argument '''get_target_inherited_props''':
+ Rev svn_proplist_receiver_t to svn_proplist_receiver2_t, adding the argument '''apr_hash_t *inherited_prop_hash'''. Also allow the possibility that the existing apr_hash_t *prop_hash argument may be null:
+ {{{#!cplusplus
- '''''### TBD: Do we want to rev svn_proplist_receiver_t so it can differentiate between explicit and inherited properties?'''''
-
- {{{
/**
+ * The callback invoked by svn_client_proplist4(). Each invocation
+ * provides the regular and/or inherited properties of @a path which
+ * is either a WC path or a URL. If @a prop_hash is not null, then it
+ * maps explicit property names (char *) to explicit property
+ * values (svn_string_t *). If @a inherited_prop_hash is not null,
+ * then it maps inherited property names (char *) to explicit property
+ * values (svn_string_t *). Use @a pool for all temporary allocations.
+ *
+ * @since New in 1.8.
+ */
+ typedef svn_error_t *(*svn_proplist_receiver2_t)(
+ void *baton,
+ const char *path,
+ apr_hash_t *prop_hash,
+ apr_hash_t *inherited_prop_hash,
+ apr_pool_t *pool);
+ }}}
+ Rev svn_client_proplist3 to svn_client_proplist4, adding the argument svn_boolean_t '''get_target_inherited_props''':
+
+ {{{#!cplusplus
+ /**
- * Invoke @a receiver with @a receiver_baton to return the regular properties
+ * Invoke @a receiver with @a receiver_baton to return the regular explicit, and
- * of @a target, a URL or working copy path. @a receiver will be called
- * for each path encountered.
+ * possibly the inherited, properties of @a target, a URL or working copy path.
+ * @a receiver will be called for each path encountered.
*
* @a target is a WC path or a URL.
*
- * If @a revision->kind is #svn_opt_revision_unspecified, then get
+ * If @a revision->kind is #svn_opt_revision_unspecified, then get the
- * properties from the working copy, if @a target is a working copy
- * path, or from the repository head if @a target is a URL. Else get
- * the properties as of @a revision. The actual node revision
- * selected is determined by the path as it exists in @a peg_revision.
- * If @a peg_revision->kind is #svn_opt_revision_unspecified, then it
- * defaults to #svn_opt_revision_head for URLs or
+ * explicit (and possibly the inherited) properties from the working copy,
+ * if @a target is a working copy path, or from the repository head if
+ * @a target is a URL. Else get the properties as of @a revision.
+ * The actual node revision selected is determined by the path as it exists
+ * in @a peg_revision. If @a peg_revision->kind is
+ * #svn_opt_revision_unspecified, then it defaults to #svn_opt_revision_head
- * #svn_opt_revision_working for WC targets. Use the authentication
+ * for URLs or #svn_opt_revision_working for WC targets. Use the
- * baton cached in @a ctx for authentication if contacting the
+ * authentication baton cached in @a ctx for authentication if contacting
- * repository.
+ * the repository.
*
* If @a depth is #svn_depth_empty, list only the properties of
* @a target itself. If @a depth is #svn_depth_files, and
@@ -218, +237 @@
svn_depth_t depth,
const apr_array_header_t *changelists,
svn_boolean_t get_target_inherited_props,
- svn_proplist_receiver_t receiver,
+ svn_proplist_receiver2_t receiver,
void *receiver_baton,
svn_client_ctx_t *ctx,
apr_pool_t *pool);
}}}
- Rev svn_client_propget4 to svn_client_propget5, adding the svn_boolean_t argument '''get_target_inherited_prop''':
+ Rev svn_client_propget4 to svn_client_propget5, adding the argument '''svn_string_t **target_inherited_prop''':
- {{{
+ {{{#!cplusplus
/**
* Set @a *props to a hash table whose keys are absolute paths or URLs
- * of items on which property @a propname is set, and whose values are
+ * of items on which property @a propname is explicitly set, and whose
- * `#svn_string_t *' representing the property value for @a propname
+ * values are `#svn_string_t *' representing the property value for
- * at that path.
+ * @a propname at that path.
+ *
+ * If @a target_inherited_prop is not null, then set
+ * @a *target_inherited_prop to the value of @a propname which @a target
+ * inherits from its nearest parent. If @a target is a working copy path,
+ * then @a target may inherit properties up to the root of the working
+ * copy. If no inherited properties are found up to the root of the
+ * working copy, then the the inherited properties cache is checked.
+ * If @a target is a URL, then @a target may inherit properties up to the
+ * root of the repository. If no property is inherited, then set
+ * @a *target_inherited_prop to null.
*
* Allocate @a *props, its keys, and its values in @a pool, use
* @a scratch_pool for temporary allocations.
@@ -264, +293 @@
* of one of those changelists. If @a changelists is empty (or
* altogether @c NULL), no changelist filtering occurs.
*
- * If @a get_target_inherited_prop is true, @a propname is an inheritable
- * property, and @a propname is not explicitly set on @a target, then also
- * include the property value (if any) for @a propname which @a target
- * inherits from its nearest parent. Regardless of whether @a target has
- * @a propname explicitly set on it or inherits that value, the absolute
- * path or URL key in @a *props still corresponds to @a target.
- * If @a target is a working copy path, then @a target may inherit
- * properties up to the root of the working copy. If no inherited
- * properties are found up to the root of the working copy, then the
- * the inherited properties cache is checked. If @a target is a URL,
- * then @a target may inherit properties up to the root of the repository.
- * If @a get_target_inherited_props is false, then no inherited properties
- * are included in @a *props.
- *
* If error, don't touch @a *props, otherwise @a *props is a hash table
* even if empty.
*
@@ -288, +303 @@
*/
svn_error_t *
svn_client_propget5(apr_hash_t **props,
+ svn_string_t **target_inherited_prop,
const char *propname,
const char *target, /* abspath or URL */
const svn_opt_revision_t *peg_revision,
@@ -295, +311 @@
svn_revnum_t *actual_revnum,
svn_depth_t depth,
const apr_array_header_t *changelists,
- svn_boolean_t get_target_inherited_prop,
svn_client_ctx_t *ctx,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
}}}
- Rev svn_ra_get_dir2 to svn_ra_get_dir3, adding the svn_boolean_t argument '''get_inherited_props''':
+ Rev svn_ra_get_dir2 to svn_ra_get_dir3, adding the argument '''apr_hash_t **inherited_props'''.''' '''Also allow the possibility that the existing apr_hash_t **props argument may be null:
- {{{
+ {{{#!cplusplus
/**
* If @a dirents is non @c NULL, set @a *dirents to contain all the entries
* of directory @a path at @a revision. The keys of @a dirents will be
@@ -328, +343 @@
* etc.) The keys are <tt>const char *</tt>, values are
* <tt>@c svn_string_t *</tt>.
*
- * If @a get_inherited_props is true and @a props is non @c NULL, then
- * include any props which @a path inherits in @a *props.
+ * If @a inherited_props is non @c NULL, set @a *inherited_props to contain
+ * any properties inherited by the directory @a path. The keys are
+ * <tt>const char *</tt>, values are <tt>@c svn_string_t *</tt>.
*
* @since New in 1.8.
*/
@@ -338, +354 @@
apr_hash_t **dirents,
svn_revnum_t *fetched_rev,
apr_hash_t **props,
+ apr_hash_t **inherited_props,
const char *path,
svn_revnum_t revision,
apr_uint32_t dirent_fields,
- svn_boolean_t get_inherited_props,
apr_pool_t *pool);
}}}
- Rev svn_ra_get_file to svn_ra_get_file2, adding the svn_boolean_t argument '''get_inherited_props''':
+ Rev svn_ra_get_file to svn_ra_get_file2, adding the argument '''apr_hash_t **inherited_props'''. Also allow the possibility that the existing apr_hash_t **props argument may be null:
+ {{{#!cplusplus
- {{{
- /**
- * Fetch the contents and properties of file @a path at @a revision.
+ /** Fetch the contents and properties of file @a path at @a revision.
* @a revision may be SVN_INVALID_REVNUM, indicating that the HEAD
* revision should be used. Interpret @a path relative to the URL in
* @a session. Use @a pool for all allocations.
@@ -367, +382 @@
* etc.) The keys are <tt>const char *</tt>, values are
* <tt>@c svn_string_t *</tt>.
*
- * If @a get_inherited_props is true and @a props is non @c NULL, then
- * include any props which @a path inherits in @a *props.
+ * If @a inherited_props is non @c NULL, set @a *inherited_props to contain
+ * any properties inherited by the directory @a path. The keys are
+ * <tt>const char *</tt>, values are <tt>@c svn_string_t *</tt>.
*
* The stream handlers for @a stream may not perform any RA
* operations using @a session.
@@ -379, +395 @@
svn_ra_get_file2(svn_ra_session_t *session,
const char *path,
svn_revnum_t revision,
- svn_boolean_t get_inherited_props,
svn_stream_t *stream,
svn_revnum_t *fetched_rev,
apr_hash_t **props,
+ apr_hash_t **inherited_props,
apr_pool_t *pool);
}}}
- Rev svn_wc_prop_get2 to svn_wc_prop_get3, adding the svn_boolean_t argument '''get_inherited_prop''':
+ Rev svn_wc_prop_get2 to svn_wc_prop_get3, adding the argument '''svn_string_t **inherited_value'''. Also allow the possibility that the existing svn_string_t **value argument may be null:
- '''''### TBD: Do we want another output argument to indicate if *VALUE is inherited or not?'''''
+ {{{#!cplusplus
+ /** If @a value is not null, then set @a *value to the value of property
+ * @a name for @a local_abspath, allocating @a *value in @a result_pool.
+ * If no such prop, set @a *value to @c NULL. @a name may be a regular or
+ * wc property; if it is an entry property, return the error
+ * #SVN_ERR_BAD_PROP_KIND.
- {{{
- /** Set @a *value to the value of property @a name for @a local_abspath,
- * allocating @a *value in @a result_pool. If no such prop, set @a *value
- * to @c NULL. @a name may be a regular or wc property; if it is an
+ * If @a inherited_value is not null, then set @a *inherited_value to the
+ * value of property @a name which @a local_abspath inherits from its
+ * nearest parent, allocating @a *inherited_value in @a result_pool.
+ * If no such prop is inherited, then set @a *inherited_value to @c NULL.
+ * @a name may only be a regular property; if it is a wc or entry property,
- * entry property, return the error #SVN_ERR_BAD_PROP_KIND. @a wc_ctx
+ * return the error #SVN_ERR_BAD_PROP_KIND.
+ *
- * is used to access the working copy.
+ * @a wc_ctx is used to access the working copy.
- *
- * If @a get_inherited_prop is true, property @a name is not explicitly
- * set on @a local_abspath, and @a name is an inheritable property, then
- * check if property @a name is inherited from a parent path of @a path.
- * If this is the case, set @a *value to the value held by the nearest
- * parent of @a path. If no parent is found with property @a name, then
- * check the inherited properties cache.
*
* If @a local_abspath is not a versioned path, return
* #SVN_ERR_WC_PATH_NOT_FOUND
@@ -410, +426 @@
*/
svn_error_t *
svn_wc_prop_get3(const svn_string_t **value,
+ const svn_string_t **inherited_value,
svn_wc_context_t *wc_ctx,
const char *local_abspath,
const char *name,
- svn_boolean_t get_inherited_prop,
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
}}}
- Rev svn_fs_node_prop to svn_fs_node_prop2, adding the svn_boolean_t argument '''get_inherited_prop''':
+ Rev svn_fs_node_prop to svn_fs_node_prop2, adding the argument '''svn_string_t **inherited_value_p'''. Also allow the possibility that the existing svn_string_t **value_p argument may be null:
- {{{
- /** Set @a *value_p to the value of the property named @a propname of
+ {{{#!cplusplus
+ /** If @a value_p is not null, then set @a *value_p to the value of the
+ * property named @a propname of @a path in @a root. If the node has no
+ * property by that name, set @a *value_p to null.
+ *
+ * If @a inherited_value_p is not null, then set @a *inherited_value_p to
+ * the value of the property named @a propname inherited by @a path in
- * @a path in @a root. If the node has no property by that name and
+ * @a root. If the node has no inherited property by that name, set
+ * @a *inherited_value_p to null.
- * @a get_inherited_prop is false, then set @a *value_p to zero. If
- * the node has no property by that name, @a propname is an inheritable
- * property, and @a get_inherited_prop is true, then set @a *value_p to
- * the value (if any) which @a path inherits from its nearest parent.
*
- * Allocate the result in @a pool.
+ * Allocate the results in @a pool.
*
* @since New in 1.8.
*/
svn_error_t *
svn_fs_node_prop2(svn_string_t **value_p,
+ svn_string_t **inherited_value_p
svn_fs_root_t *root,
const char *path,
const char *propname,
svn_boolean_t get_inherited_prop,
apr_pool_t *pool);
}}}
- Rev svn_fs_node_proplist to svn_fs_node_proplist2, adding the svn_boolean_t argument '''get_inherited_props''':
+ Rev svn_fs_node_proplist to svn_fs_node_proplist2, adding the argument '''apr_hash_t **inherited_table_p'''. Also allow the possibility that the existing apr_hash_t **table_p argument may be null:
- {{{
+ {{{#!cplusplus
+ /** If @a table_p is not null, then set @a *table_p to the entire property
+ * list of @a path in @a root.
+ *
+ * If @a inherited_table_p is not null, then set @a *inherited_table_p to
- /** Set @a *table_p to the entire property list of @a path in @a root,
+ * the entire inherited property list of @a path in @a root.
- * as an APR hash table allocated in @a pool. The resulting table maps
+ *
- * property names to pointers to #svn_string_t objects containing the
+ * Both hashes map property names to pointers to #svn_string_t objects
+ * containing the property value. Both hashes are allocated in @a pool.
- * property value. If @a get_inherited_props is true, then any properties
- * inherited by @a path are also included in @a *table_p.
*
* @since New in 1.8.
*/
svn_error_t *
svn_fs_node_proplist2(apr_hash_t **table_p,
+ apr_hash_t **inherited_table_p,
svn_fs_root_t *root,
const char *path,
- svn_boolean_t get_inherited_props,
apr_pool_t *pool);
}}}
== New APIs ==
- {{{
+ {{{#!cplusplus
/** Return @c TRUE iff @a prop_name represents the name of a inheritable
* property.
*