[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Adding new Subversion-private API's in patch releaqses

From: Daniel Shahaf <d.s_at_daniel.shahaf.name>
Date: Mon, 14 Feb 2011 18:44:21 +0200

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 */
]]]
Received on 2011-02-14 17:49:33 CET

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.