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 */
]]]

Reply via email to