The 1.6.x-svn_fs_commit_txn branch adds a new Subversion-private API. On the one hand, if we add a new private API to 1.6.16, then clients compiled against 1.6.16 will fail if run with 1.6.15 present in runtime. (svn_ver_compatible() doesn't compare the patch number, only the major/minor numbers.) Consequently, adding this API might break 1.6.16->1.6.15 downgrading, which (last I check) we promise to work.
On the other hand, we have precedent for adding new private API's in patch releases (attached). Thoughts? Should or shouldn't we add Subversion-private API's in non-.0 releases? Daniel [[[ % svn diff ^/subversion/tags/1.6.{0,15} Index: svn_fs_util.h =================================================================== --- svn_fs_util.h (.../1.6.0/subversion/include/private) (revision 1070566) +++ svn_fs_util.h (.../1.6.15/subversion/include/private) (revision 1070566) @@ -169,6 +169,17 @@ const char *path, apr_pool_t *pool); +/* Allocate an svn_fs_path_change2_t structure in POOL, initialize and + return it. + + Set the node_rev_id field of the created struct to NODE_REV_ID, and + change_kind to CHANGE_KIND. Set all other fields to their _unknown, + NULL or invalid value, respectively. */ +svn_fs_path_change2_t * +svn_fs__path_change2_create(const svn_fs_id_t *node_rev_id, + svn_fs_path_change_kind_t change_kind, + apr_pool_t *pool); + #ifdef __cplusplus } #endif /* __cplusplus */ Index: svn_mergeinfo_private.h =================================================================== --- svn_mergeinfo_private.h (.../1.6.0/subversion/include/private) (revision 1070566) +++ svn_mergeinfo_private.h (.../1.6.15/subversion/include/private) (revision 1070566) @@ -33,6 +33,12 @@ #endif /* __cplusplus */ +/* Set inheritability of all ranges in RANGELIST to INHERITABLE. + If RANGELIST is NULL do nothing. */ +void +svn_rangelist__set_inheritance(apr_array_header_t *rangelist, + svn_boolean_t inheritable); + /* Return whether INFO1 and INFO2 are equal in *IS_EQUAL. CONSIDER_INERITANCE determines how the rangelists in the two @@ -79,6 +85,19 @@ const char *prefix, apr_pool_t *pool); +/* Make a shallow (ie, mergeinfos are not duped, or altered at all; + though keys are reallocated) copy of IN_CATALOG in *OUT_CATALOG, + adding PREFIX_PATH to the beginning of each key in the catalog. + + The new hash keys are allocated in RESULT_POOL. SCRATCH_POOL + is used for any temporary allocations.*/ +svn_error_t * +svn_mergeinfo__add_prefix_to_catalog(svn_mergeinfo_catalog_t *out_catalog, + svn_mergeinfo_catalog_t in_catalog, + const char *prefix_path, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + /* Create a string representation of CATALOG in *OUTPUT, allocated in POOL. The hash keys of CATALOG and the merge source paths of each key's mergeinfo are represented in sorted order as per svn_sort_compare_items_as_paths. @@ -140,7 +165,50 @@ svn_revnum_t oldest_rev, apr_pool_t *pool); +/* Combine one mergeinfo catalog, CHANGES_CATALOG, into another mergeinfo + catalog MERGEINFO_CATALOG. If both catalogs have mergeinfo for the same + key, use svn_mergeinfo_merge() to combine the mergeinfos. + + Additions to MERGEINFO_CATALOG are deep copies allocated in + RESULT_POOL. Temporary allocations are made in SCRATCH_POOL. */ +svn_error_t * +svn_mergeinfo__catalog_merge(svn_mergeinfo_catalog_t mergeinfo_catalog, + svn_mergeinfo_catalog_t changes_catalog, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + +/* Removes ERASER (the subtrahend) from WHITEBOARD (the + minuend), and places the resulting difference in *MERGEINFO. + Allocates *MERGEINFO in RESULT_POOL. Temporary allocations + will be performed in SCRATCH_POOL. + CONSIDER_INHERITANCE determines how to account for the inheritability + of the two mergeinfo's ranges when calculating the range equivalence, + as described for svn_mergeinfo_diff().*/ +svn_error_t * +svn_mergeinfo__remove2(svn_mergeinfo_t *mergeinfo, + svn_mergeinfo_t eraser, + svn_mergeinfo_t whiteboard, + svn_boolean_t consider_inheritance, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + +/* Find the intersection of two mergeinfos, MERGEINFO1 and + MERGEINFO2, and place the result in *MERGEINFO, which is (deeply) + allocated in RESULT_POOL. Temporary allocations will be performed + in SCRATCH_POOL. + + CONSIDER_INHERITANCE determines how to account for the inheritability + of the two mergeinfo's ranges when calculating the range equivalence, + as described for svn_mergeinfo_diff(). */ +svn_error_t * +svn_mergeinfo__intersect2(svn_mergeinfo_t *mergeinfo, + svn_mergeinfo_t mergeinfo1, + svn_mergeinfo_t mergeinfo2, + svn_boolean_t consider_inheritance, + apr_pool_t *result_pool, + apr_pool_t *scratch_pool); + #ifdef __cplusplus } #endif /* __cplusplus */ Index: svn_atomic.h =================================================================== --- svn_atomic.h (.../1.6.0/subversion/include/private) (revision 1070566) +++ svn_atomic.h (.../1.6.15/subversion/include/private) (revision 1070566) @@ -100,14 +100,16 @@ svn_error_t * svn_atomic__init_once(volatile svn_atomic_t *global_status, - svn_error_t *(*init_func)(apr_pool_t*), apr_pool_t* pool); + svn_error_t *(*init_func)(void*,apr_pool_t*), + void *baton, + apr_pool_t* pool); #ifdef __cplusplus } Index: svn_opt_private.h =================================================================== --- svn_opt_private.h (.../1.6.0/subversion/include/private) (revision 1070566) +++ svn_opt_private.h (.../1.6.15/subversion/include/private) (revision 1070566) @@ -106,6 +113,27 @@ apr_array_header_t *known_targets, apr_pool_t *pool); +/* Return, in @a *true_targets_p, a copy of @a targets with peg revision + * specifiers snipped off the end of each element. + * + * This function is useful for subcommands for which peg revisions + * do not make any sense. Such subcommands still need to allow peg + * revisions to be specified on the command line so that users of + * the command line client can consistently escape '@' characters + * in filenames by appending an '@' character, regardless of the + * subcommand being used. + * + * If a peg revision is present but cannot be parsed, an error is thrown. + * The user has likely forgotten to escape an '@' character in a filename. + * + * It is safe to pass the address of @a targets as @a true_targets_p. + * + * Do all allocations in @a pool. */ +svn_error_t * +svn_opt__eat_peg_revisions(apr_array_header_t **true_targets_p, + apr_array_header_t *targets, + apr_pool_t *pool); + #ifdef __cplusplus } #endif /* __cplusplus */ ]]]