diff options
Diffstat (limited to 'subversion/include/svn_repos.h')
-rw-r--r-- | subversion/include/svn_repos.h | 566 |
1 files changed, 538 insertions, 28 deletions
diff --git a/subversion/include/svn_repos.h b/subversion/include/svn_repos.h index 45b7a8fe579b6..9bb462abbb3cf 100644 --- a/subversion/include/svn_repos.h +++ b/subversion/include/svn_repos.h @@ -244,7 +244,13 @@ typedef enum svn_repos_notify_action_t svn_repos_notify_format_bumped, /** A revision range was copied. @since New in 1.9. */ - svn_repos_notify_hotcopy_rev_range + svn_repos_notify_hotcopy_rev_range, + + /** The repository pack did not do anything. @since New in 1.10. */ + svn_repos_notify_pack_noop, + + /** The revision properties got set. @since New in 1.10. */ + svn_repos_notify_load_revprop_set } svn_repos_notify_action_t; /** The type of warning occurring. @@ -369,6 +375,24 @@ typedef void (*svn_repos_notify_func_t)(void *baton, const svn_repos_notify_t *notify, apr_pool_t *scratch_pool); +/** Callback for filtering repository contents during dump. + * + * Set @a *include to TRUE to indicate that node, identified by path + * @a path in @a root should be included in dump, or set it to @c FALSE + * to indicate that node should be excluded (presumably according to state + * stored in @a baton). + * + * Do not assume @a scratch_pool has any lifetime beyond this call. + * + * @since New in 1.10. + */ +typedef svn_error_t * (*svn_repos_dump_filter_func_t)( + svn_boolean_t *include, + svn_fs_root_t *root, + const char *path, + void *baton, + apr_pool_t *scratch_pool); + /** * Allocate an #svn_repos_notify_t structure in @a result_pool, initialize * and return it. @@ -1701,6 +1725,68 @@ svn_repos_stat(svn_dirent_t **dirent, const char *path, apr_pool_t *pool); +/** + * Callback type to be used with svn_repos_list(). It will be invoked for + * every directory entry found. + * + * The full path of the entry is given in @a path and @a dirent contains + * various additional information. If svn_repos_list() has been called + * with @a path_info_only set, only the @a kind element of this struct + * will be valid. + * + * @a baton is the user-provided receiver baton. @a scratch_pool may be + * used for temporary allocations. + * + * @since New in 1.10. + */ +typedef svn_error_t *(* svn_repos_dirent_receiver_t)(const char *path, + svn_dirent_t *dirent, + void *baton, + apr_pool_t *scratch_pool); + +/** + * Efficiently list everything within a sub-tree. Specify glob patterns + * to search for specific files and folders. + * + * Walk the sub-tree starting at @a path under @a root up to the given + * @a depth. For each directory entry found, @a receiver will be called + * with @a receiver_baton. The starting @a path will be reported as well. + * Because retrieving all elements of a #svn_dirent_t can be expensive, + * you may set @a path_info_only to receive only the path name and the node + * kind. The entries will be reported ordered by their path. + * + * @a patterns is an optional array of <tt>const char *</tt>. If it is + * not @c NULL, only those directory entries will be reported whose last + * path segment matches at least one of these patterns. This feature uses + * apr_fnmatch() for glob matching and requiring '.' to matched by dots + * in the path. + * + * If @a authz_read_func is not @c NULL, this function will neither report + * entries nor recurse into directories that the user has no access to. + * + * Cancellation support is provided in the usual way through the optional + * @a cancel_func and @a cancel_baton. + * + * @a path must point to a directory and @a depth must be at least + * #svn_depth_empty. + * + * Use @a scratch_pool for temporary memory allocation. + * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_list(svn_fs_root_t *root, + const char *path, + const apr_array_header_t *patterns, + svn_depth_t depth, + svn_boolean_t path_info_only, + svn_repos_authz_func_t authz_read_func, + void *authz_read_baton, + svn_repos_dirent_receiver_t receiver, + void *receiver_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *scratch_pool); /** * Given @a path which exists at revision @a start in @a fs, set @@ -1864,13 +1950,181 @@ svn_repos_node_location_segments(svn_repos_t *repos, /* Retrieving log messages. */ +/** Path change descriptor. + * + * @note Identical to #svn_fs_path_change3_t but with all information + * known, i.e. @a node_kind is never #svn_node_unknown and + * @a copyfrom_known is always @c TRUE. + * + * @note To allow for extending this structure in future releases, + * always use svn_repos_path_change_create() to allocate the stucture. + * + * @see svn_fs_path_change3_t + * + * @since New in 1.10. + */ +typedef svn_fs_path_change3_t svn_repos_path_change_t; + +/** + * Return an #svn_repos_path_change_t structure, allocated in @a result_pool, + * with all fields initialized to their respective null/none/empty/invalid + * values. + * + * @note To allow for extending the #svn_repos_path_change_t structure in + * future releases, this function should always be used to allocate it. + * + * @since New in 1.10. + */ +svn_repos_path_change_t * +svn_repos_path_change_create(apr_pool_t *result_pool); + +/** + * Return a deep copy of @a change, allocated in @a result_pool. + * + * @since New in 1.10. + */ +svn_repos_path_change_t * +svn_repos_path_change_dup(svn_repos_path_change_t *change, + apr_pool_t *result_pool); + +/** The callback invoked by log message loopers, such as + * svn_repos_get_logs5(). + * + * This function is invoked once on each changed path, in a potentially + * random order that may even change between invocations for the same + * revisions. + * + * @a baton is what you think it is, and @a change contains relevant + * information for the changed path. Please note that @a change may be + * modified within this callback but it will become invalid as soon as + * the callback returns. + * + * Use @a scratch_pool for temporary allocation. The caller may clear it + * between or after invocations. + * + * @since New in 1.10. + */ +typedef svn_error_t *(*svn_repos_path_change_receiver_t)( + void *baton, + svn_repos_path_change_t *change, + apr_pool_t *scratch_pool); + /** - * Invoke @a receiver with @a receiver_baton on each log message from - * @a start to @a end in @a repos's filesystem. @a start may be greater - * or less than @a end; this just controls whether the log messages are + * A structure to represent all the information about a particular log entry. + * + * @note To allow for extending this structure in future releases, + * always use svn_repos_log_entry_create() to allocate the stucture. + * + * @since New in 1.10. + */ +typedef struct svn_repos_log_entry_t +{ + /** The revision of the commit. */ + svn_revnum_t revision; + + /** The hash of requested revision properties, which may be NULL if it + * would contain no revprops. Maps (const char *) property name to + * (svn_string_t *) property value. */ + apr_hash_t *revprops; + + /** + * Whether or not this message has children. + * + * When a log operation requests additional merge information, extra log + * entries may be returned as a result of this entry. The new entries, are + * considered children of the original entry, and will follow it. When + * the HAS_CHILDREN flag is set, the receiver should increment its stack + * depth, and wait until an entry is provided with SVN_INVALID_REVNUM which + * indicates the end of the children. + * + * For log operations which do not request additional merge information, the + * HAS_CHILDREN flag is always FALSE. + * + * For more information see: + * https://svn.apache.org/repos/asf/subversion/trunk/notes/merge-tracking/design.html#commutative-reporting + */ + svn_boolean_t has_children; + + /** + * Whether @a revision should be interpreted as non-inheritable in the + * same sense of #svn_merge_range_t. + * + * Currently always FALSE. + */ + svn_boolean_t non_inheritable; + + /** + * Whether @a revision is a merged revision resulting from a reverse merge. + */ + svn_boolean_t subtractive_merge; + + /* NOTE: Add new fields at the end to preserve binary compatibility. */ +} svn_repos_log_entry_t; + +/** + * Return an #svn_repos_log_entry_t, allocated in @a result_pool, + * with all fields initialized to their respective null/none/empty/invalid + * values. + * + * @note To allow for extending the #svn_repos_log_entry_t structure in + * future releases, this function should always be used to allocate it. + * + * @since New in 1.10. + */ +svn_repos_log_entry_t * +svn_repos_log_entry_create(apr_pool_t *result_pool); + +/** Return a deep copy of @a log_entry, allocated in @a result_pool. + * + * @since New in 1.10. + */ +svn_repos_log_entry_t * +svn_repos_log_entry_dup(const svn_repos_log_entry_t *log_entry, + apr_pool_t *result_pool); + + +/** The callback invoked by log message loopers, such as + * svn_repos_get_logs5(). + * + * This function is invoked once on each log message, in the order + * determined by the caller (see above-mentioned functions). + * + * @a baton is what you think it is, and @a log_entry contains relevant + * information for the log message. + * + * If @a log_entry->has_children is @c TRUE, the message will be followed + * immediately by any number of merged revisions (child messages), which are + * terminated by an invocation with SVN_INVALID_REVNUM. This usage may + * be recursive. + * + * Use @a scratch_pool for temporary allocation. The caller may clear it + * between or after invocations. + * + * @since New in 1.10. + */ +typedef svn_error_t *(*svn_repos_log_entry_receiver_t)( + void *baton, + svn_repos_log_entry_t *log_entry, + apr_pool_t *scratch_pool); + + +/** + * Invoke @a revision_receiver with @a revision_receiver_baton on each + * revision from @a start to @a end in @a repos's filesystem. @a start may + * be greater or less than @a end; this just controls whether the log is * processed in descending or ascending revision number order. * + * If not @c NULL, @a path_change_receiver will be invoked with + * @a path_change_receiver_baton for each changed path in the respective + * revision. These changes will be reported before the @a revision_receiver + * is invoked for that revision. So, for each revision in the log, there + * is a number of calls to @a path_change_receiver followed by a single + * invocation of @a revision_receiver, implicitly marking the end of the + * changes list for that revision. If a revision does not contain any + * changes (or if none are visible due to @a authz_read_func), + * @a path_change_receiver will not be called for that revision. + * * If @a start or @a end is #SVN_INVALID_REVNUM, it defaults to youngest. * * If @a paths is non-NULL and has one or more elements, then only show @@ -1881,13 +2135,8 @@ svn_repos_node_location_segments(svn_repos_t *repos, * show all revisions regardless of what paths were changed in those * revisions. * - * If @a limit is greater than zero then only invoke @a receiver on the first - * @a limit logs. - * - * If @a discover_changed_paths, then each call to @a receiver passes a - * hash mapping paths committed in that revision to information about them - * as the receiver's @a changed_paths argument. - * Otherwise, each call to @a receiver passes NULL for @a changed_paths. + * If @a limit is greater than zero then only invoke @a revision_receiver + * on the first @a limit logs. * * If @a strict_node_history is set, copy history (if any exists) will * not be traversed while harvesting revision logs for each path. @@ -1902,28 +2151,64 @@ svn_repos_node_location_segments(svn_repos_t *repos, * only the revision properties named by the (const char *) array elements * (i.e. retrieve none if the array is empty). * - * If any invocation of @a receiver returns error, return that error - * immediately and without wrapping it. + * If any invocation of @a revision_receiver or @a path_change_receiver + * returnn an error, return that error immediately and without wrapping it. * * If @a start or @a end is a non-existent revision, return the error - * #SVN_ERR_FS_NO_SUCH_REVISION, without ever invoking @a receiver. + * #SVN_ERR_FS_NO_SUCH_REVISION, without ever invoking @a revision_receiver. * * If optional @a authz_read_func is non-NULL, then use this function * (along with optional @a authz_read_baton) to check the readability * of each changed-path in each revision about to be "pushed" at - * @a receiver. If a revision has some changed-paths readable and - * others unreadable, unreadable paths are omitted from the - * changed_paths field and only svn:author and svn:date will be - * available in the revprops field. If a revision has no - * changed-paths readable at all, then all paths are omitted and no - * revprops are available. + * @a path_change_receiver. If a revision has some changed-paths readable + * and others unreadable, unreadable paths are omitted from the + * @a path_change_receiver invocations and only svn:author and svn:date + * will be available in the revprops field in the @a revision_receiver + * callback. If a revision has no changed-paths readable at all, then all + * paths are omitted and no revprops are available. If + * @a path_change_receiver is @c NULL, the same filtering is performed + * just without reporting any path changes. * - * See also the documentation for #svn_log_entry_receiver_t. + * Use @a scratch_pool for temporary allocations. * - * Use @a pool for temporary allocations. + * @see svn_repos_path_change_receiver_t, svn_repos_log_entry_receiver_t + * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_get_logs5(svn_repos_t *repos, + const apr_array_header_t *paths, + svn_revnum_t start, + svn_revnum_t end, + int limit, + svn_boolean_t strict_node_history, + svn_boolean_t include_merged_revisions, + const apr_array_header_t *revprops, + svn_repos_authz_func_t authz_read_func, + void *authz_read_baton, + svn_repos_path_change_receiver_t path_change_receiver, + void *path_change_receiver_baton, + svn_repos_log_entry_receiver_t revision_receiver, + void *revision_receiver_baton, + apr_pool_t *scratch_pool); + +/** + * Similar to svn_repos_get_logs5 but using a #svn_log_entry_receiver_t + * @a receiver to receive revision properties and changed paths through a + * single callback and the @a discover_changed_paths flag to control it. + * + * If @a discover_changed_paths, then each call to @a receiver passes a + * hash mapping paths committed in that revision to information about them + * as the receiver's @a changed_paths argument. + * Otherwise, each call to @a receiver passes NULL for @a changed_paths. + * + * @see svn_log_entry_receiver_t * * @since New in 1.5. + * + * @deprecated Provided for backward compatibility with the 1.9 API. */ +SVN_DEPRECATED svn_error_t * svn_repos_get_logs4(svn_repos_t *repos, const apr_array_header_t *paths, @@ -2009,12 +2294,20 @@ svn_repos_get_logs(svn_repos_t *repos, /* Retrieving mergeinfo. */ +/** Receives parsed @a mergeinfo for the file system path @a path. + * + * The user-provided @a baton is being passed through by the retrieval + * function and @a scratch_pool will be cleared between invocations. + * + * @since New in 1.10. + */ +typedef svn_fs_mergeinfo_receiver_t svn_repos_mergeinfo_receiver_t; + /** - * Fetch the mergeinfo for @a paths at @a revision in @a repos, and - * set @a *catalog to a catalog of this mergeinfo. @a *catalog will - * never be @c NULL but may be empty. + * For each node found with mergeinfo on it, invoke @a receiver with + * the provided @a receiver_baton. * - * The paths in @a paths, and the keys of @a catalog, start with '/'. + * The paths in @a paths start with '/'. * * @a inherit indicates whether explicit, explicit or inherited, or * only inherited mergeinfo for @a paths is fetched. @@ -2026,17 +2319,38 @@ svn_repos_get_logs(svn_repos_t *repos, * the #SVN_PROP_MERGEINFO property explicitly set on it. (Note * that inheritance is only taken into account for the elements in @a * paths; descendants of the elements in @a paths which get their - * mergeinfo via inheritance are not included in @a *catalog.) + * mergeinfo via inheritance are not reported to @a receiver.) * * If optional @a authz_read_func is non-NULL, then use this function * (along with optional @a authz_read_baton) to check the readability * of each path which mergeinfo was requested for (from @a paths). * Silently omit unreadable paths from the request for mergeinfo. * - * Use @a pool for all allocations. + * Use @a scratch_pool for temporary allocations. + * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_fs_get_mergeinfo2(svn_repos_t *repos, + const apr_array_header_t *paths, + svn_revnum_t revision, + svn_mergeinfo_inheritance_t inherit, + svn_boolean_t include_descendants, + svn_repos_authz_func_t authz_read_func, + void *authz_read_baton, + svn_repos_mergeinfo_receiver_t receiver, + void *receiver_baton, + apr_pool_t *scratch_pool); + +/** + * Same as svn_repos_fs_get_mergeinfo2(), but all mergeinfo is being collected + * and returned in @a *catalog. It will never be @c NULL, but may be empty. * * @since New in 1.5. + * + * @deprecated Provided for backward compatibility with the 1.9 API. */ +SVN_DEPRECATED svn_error_t * svn_repos_fs_get_mergeinfo(svn_mergeinfo_catalog_t *catalog, svn_repos_t *repos, @@ -2983,6 +3297,12 @@ svn_repos_verify_fs(svn_repos_t *repos, * be done with full plain text. A dump with @a use_deltas set cannot * be loaded by Subversion 1.0.x. * + * If @a include_revprops is @c TRUE, output the revision properties as + * well, otherwise omit them. + * + * If @a include_changes is @c TRUE, output the revision contents, i.e. + * tree and node changes. + * * If @a notify_func is not null, then call it with @a notify_baton and * with a notification structure in which the fields are set as follows. * (For a warning or error notification that does not apply to a specific @@ -3008,14 +3328,43 @@ svn_repos_verify_fs(svn_repos_t *repos, * reiterating the existence of previous warnings * ### This is a presentation issue. Caller could do this itself. * + * If @a filter_func is not @c NULL, it is called for each node being + * dumped, allowing the caller to exclude it from dump. + * * If @a cancel_func is not @c NULL, it is called periodically with * @a cancel_baton as argument to see if the client wishes to cancel * the dump. * * Use @a scratch_pool for temporary allocation. * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_dump_fs4(svn_repos_t *repos, + svn_stream_t *stream, + svn_revnum_t start_rev, + svn_revnum_t end_rev, + svn_boolean_t incremental, + svn_boolean_t use_deltas, + svn_boolean_t include_revprops, + svn_boolean_t include_changes, + svn_repos_notify_func_t notify_func, + void *notify_baton, + svn_repos_dump_filter_func_t filter_func, + void *filter_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *pool); + +/** + * Similar to svn_repos_dump_fs4(), but with @a include_revprops and + * @a include_changes both set to @c TRUE and @a filter_func and + * @a filter_baton set to @c NULL. + * * @since New in 1.7. + * @deprecated Provided for backward compatibility with the 1.9 API. */ +SVN_DEPRECATED svn_error_t * svn_repos_dump_fs3(svn_repos_t *repos, svn_stream_t *dumpstream, @@ -3111,6 +3460,15 @@ svn_repos_dump_fs(svn_repos_t *repos, * to be stamped as if they were newly created via the normal commit * process. * + * If @a normalize_props is set, attempt to normalize invalid Subversion + * revision and node properties (those in the svn: namespace) so that + * their values would follow the established rules for them. For example, + * for such properties, typically the value must be in UTF-8 with LF + * line endings. + * + * @note The details or the performed normalizations are deliberately + * left unspecified and may change in the future. + * * If non-NULL, use @a notify_func and @a notify_baton to send notification * of events to the caller. * @@ -3118,8 +3476,34 @@ svn_repos_dump_fs(svn_repos_t *repos, * @a cancel_baton as argument to see if the client wishes to cancel * the load. * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_load_fs6(svn_repos_t *repos, + svn_stream_t *dumpstream, + svn_revnum_t start_rev, + svn_revnum_t end_rev, + enum svn_repos_load_uuid uuid_action, + const char *parent_dir, + svn_boolean_t use_pre_commit_hook, + svn_boolean_t use_post_commit_hook, + svn_boolean_t validate_props, + svn_boolean_t ignore_dates, + svn_boolean_t normalize_props, + svn_repos_notify_func_t notify_func, + void *notify_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *pool); + +/** + * Similar to svn_repos_load_fs6(), but with the @a normalize_props + * parameter always set to @c FALSE. + * * @since New in 1.9. + * @deprecated Provided for backward compatibility with the 1.9 API. */ +SVN_DEPRECATED svn_error_t * svn_repos_load_fs5(svn_repos_t *repos, svn_stream_t *dumpstream, @@ -3219,6 +3603,62 @@ svn_repos_load_fs(svn_repos_t *repos, void *cancel_baton, apr_pool_t *pool); +/** + * Read and parse dumpfile-formatted @a dumpstream, extracting the + * revision properties from it and apply them to the already-open + * @a repos. Use @a scratch_pool for temporary allocations. + * + * If, after filtering by the @a start_rev and @a end_rev, the dumpstream + * contains revisions missing in @a repos, an error will be thrown. + * + * @a start_rev and @a end_rev act as filters, the lower and upper + * (inclusive) range values of revisions in @a dumpstream which will + * be loaded. Either both of these values are #SVN_INVALID_REVNUM (in + * which case no revision-based filtering occurs at all), or both are + * valid revisions (where @a start_rev is older than or equivalent to + * @a end_rev). + * + * If @a validate_props is set, then validate Subversion revision + * properties (those in the svn: namespace) against established + * rules for those things. + * + * If @a ignore_dates is set, ignore any revision datestamps found in + * @a dumpstream, keeping whatever timestamps the revisions currently + * have. + * + * If @a normalize_props is set, attempt to normalize invalid Subversion + * revision and node properties (those in the svn: namespace) so that + * their values would follow the established rules for them. For example, + * for such properties, typically the value must be in UTF-8 with LF + * line endings. + * + * @note The details or the performed normalizations are deliberately + * left unspecified and may change in the future. + * + * If non-NULL, use @a notify_func and @a notify_baton to send notification + * of events to the caller. + * + * If @a cancel_func is not @c NULL, it is called periodically with + * @a cancel_baton as argument to see if the client wishes to cancel + * the load. + * + * @remark No repository hooks will be triggered. + * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_load_fs_revprops(svn_repos_t *repos, + svn_stream_t *dumpstream, + svn_revnum_t start_rev, + svn_revnum_t end_rev, + svn_boolean_t validate_props, + svn_boolean_t ignore_dates, + svn_boolean_t normalize_props, + svn_repos_notify_func_t notify_func, + void *notify_baton, + svn_cancel_func_t cancel_func, + void *cancel_baton, + apr_pool_t *scratch_pool); /** * A vtable that is driven by svn_repos_parse_dumpstream3(). @@ -3362,6 +3802,9 @@ typedef struct svn_repos_parse_fns3_t * could stop reading entirely after the youngest required rev. * * @since New in 1.8. + + * @since Starting in 1.10, @a parse_fns may contain #NULL pointers for + * those callbacks that the caller is not interested in. */ svn_error_t * svn_repos_parse_dumpstream3(svn_stream_t *stream, @@ -3414,12 +3857,47 @@ svn_repos_parse_dumpstream3(svn_stream_t *stream, * to be stamped as if they were newly created via the normal commit * process. * + * If @a normalize_props is set, attempt to normalize invalid Subversion + * revision and node properties (those in the svn: namespace) so that + * their values would follow the established rules for them. For example, + * for such properties, typically the value must be in UTF-8 with LF + * line endings. + * + * @note The details or the performed normalizations are deliberately + * left unspecified and may change in the future. + * * If @a parent_dir is not NULL, then the parser will reparent all the * loaded nodes, from root to @a parent_dir. The directory @a parent_dir * must be an existing directory in the repository. * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_get_fs_build_parser6(const svn_repos_parse_fns3_t **parser, + void **parse_baton, + svn_repos_t *repos, + svn_revnum_t start_rev, + svn_revnum_t end_rev, + svn_boolean_t use_history, + svn_boolean_t validate_props, + enum svn_repos_load_uuid uuid_action, + const char *parent_dir, + svn_boolean_t use_pre_commit_hook, + svn_boolean_t use_post_commit_hook, + svn_boolean_t ignore_dates, + svn_boolean_t normalize_props, + svn_repos_notify_func_t notify_func, + void *notify_baton, + apr_pool_t *pool); + +/** + * Similar to svn_repos_get_fs_build_parser6(), but with the + * @a normalize_props parameter always set to @c FALSE. + * * @since New in 1.9. + * @deprecated Provided for backward compatibility with the 1.9 API. */ +SVN_DEPRECATED svn_error_t * svn_repos_get_fs_build_parser5(const svn_repos_parse_fns3_t **parser, void **parse_baton, @@ -3655,6 +4133,17 @@ svn_repos_get_fs_build_parser(const svn_repos_parser_fns_t **parser, typedef struct svn_authz_t svn_authz_t; /** + * This should be called before any other authz function. + * + * @a pool must support multi-threaded access if the application will use + * authz from multiple threads. + * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_authz_initialize(apr_pool_t *pool); + +/** * Read authz configuration data from @a path (a dirent, an absolute file url * or a registry path) into @a *authz_p, allocated in @a pool. * @@ -3667,8 +4156,29 @@ typedef struct svn_authz_t svn_authz_t; * is also an error other than #SVN_ERR_AUTHZ_INVALID_CONFIG (exact error * depends on the access type). * + * For efficient access of in-repository authz, you may provide @a repos_hint + * which will be tried first and may remove the need to open a temporary + * repository instance. Otherwise, set it to NULL and the repositories will + * be opened as needed. + * + * @since New in 1.10. + */ +svn_error_t * +svn_repos_authz_read3(svn_authz_t **authz_p, + const char *path, + const char *groups_path, + svn_boolean_t must_exist, + svn_repos_t *repos_hint, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + +/** + * Similar to svn_repos_authz_read3(), but with @a repos_hint set to @c NULL. + * * @since New in 1.8. + * @deprecated Provided for backward compatibility with the 1.9 API. */ +SVN_DEPRECATED svn_error_t * svn_repos_authz_read2(svn_authz_t **authz_p, const char *path, |