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

Re: svn commit: r1665437 - /subversion/trunk/subversion/include/svn_fs.h

From: Julian Foad <julianfoad_at_btopenworld.com>
Date: Tue, 10 Mar 2015 12:18:01 +0000

Ivan Zhakov wrote:
>> URL: http://svn.apache.org/r1665437
>> Modified: subversion/trunk/subversion/include/svn_fs.h
>> - * @note Using FS ID based functions is now discouraged and may be fully
>> - * deprecated in future releases. New code should use #svn_fs_node_relation()
>> - * and #svn_fs_node_relation_t instead.
>> + * @note Using FS ID based functions is discouraged since 1.9 and may be
>> + * fully deprecated in future releases. New code should use
>> + * #svn_fs_node_relation() and #svn_fs_node_relation_t instead.
>> */
>> int
>> svn_fs_compare_ids(const svn_fs_id_t *a,
(and svn_fs_check_related)
>
> Stefan,
>
> You have proposed to deprecate the FS ID functions [1], but got well
> justified objections [2].
>
> Are you going to remove these "future deprecation" clauses from
> svn_fs.h or you have alternative ideas regarding this matter?
>
> [1] http://svn.haxx.se/dev/archive-2013-12/0127.shtml
> [2] http://svn.haxx.se/dev/archive-2013-12/0132.shtml

My thoughts:

The argument that we would want to use these ids for mergeinfo is, in my opinion, 99% unlikely.

It doesn't make much sense to deprecate just the id comparison functions without deprecating all parts of the FS API that deal with node-rev ids: svn_fs_dirent_t, svn_fs_path_change2_t and svn_fs_node_id().

It would be much clearer to write "node-revision" instead of just "node" where the doc string says things like "if it is the same node". I suggest we also consider renaming the symbols: s/node/noderev/. The symbol 'svn_fs_node_same' in particular is confusing.

This code appears in the FSFS implementation, fs_node_relation():

/* Nodes from different transactions are never related. */
if (root_a->is_txn_root && root_b->is_txn_root
&& strcmp(root_a->txn, root_b->txn))
{
*relation = svn_fs_node_unrelated;
return SVN_NO_ERROR;
}

I don't understand this. In the FS-BASE implementation, base_node_relation(), node-revs are related iff they share the same node-id, regardless of what txns they may be in. Why is it different here?

I suggest the following comment changes:
[[[
Index: subversion/include/svn_fs.h
===================================================================
--- subversion/include/svn_fs.h (revision 1665169)
+++ subversion/include/svn_fs.h (working copy)
@@ -871,25 +871,25 @@ svn_fs_access_add_lock_token(svn_fs_acce
* @{
*/

-/** Defines the possible ways two arbitrary nodes may be related.
+/** Defines the possible ways two arbitrary node-revisions may be related.
*
* @since New in 1.9.
*/
typedef enum svn_fs_node_relation_t
{
- /** The nodes are not related.
- * Nodes from different repositories are always unrelated.
+ /** The node-revisions are not related.
+ * Node-revisions from different repositories are always unrelated.
* #svn_fs_compare_ids would return the value -1 in this case.
*/
svn_fs_node_unrelated = 0,

- /** They are the same physical node, i.e. there is no intervening change.
+ /** They are the same node-revision, i.e. there is no intervening change.
* However, due to lazy copying, there may be part of different parent
* copies. #svn_fs_compare_ids would return the value 0 in this case.
*/
svn_fs_node_same,

- /** The nodes have a common ancestor (which may be one of these nodes)
+ /** The node-revisions have a common ancestor (which may be one of them)
* but are not the same.
* #svn_fs_compare_ids would return the value 1 in this case.
*/
@@ -904,9 +904,7 @@ typedef struct svn_fs_id_t svn_fs_id_t;
/** Return -1, 0, or 1 if node revisions @a a and @a b are respectively
* unrelated, equivalent, or otherwise related (part of the same node).
*
- * @note Using FS ID based functions is now discouraged and may be fully
- * deprecated in future releases. New code should use #svn_fs_node_relation()
- * and #svn_fs_node_relation_t instead.
+ * @see svn_fs_node_relation() for an alternative.
*/
int
svn_fs_compare_ids(const svn_fs_id_t *a,
@@ -917,9 +915,7 @@ svn_fs_compare_ids(const svn_fs_id_t *a,
/** Return TRUE if node revisions @a id1 and @a id2 are related (part of the
* same node), else return FALSE.
*
- * @note Using FS ID based functions is now discouraged and may be fully
- * deprecated in future releases. New code should use #svn_fs_node_relation()
- * and #svn_fs_node_relation_t instead.
+ * @see svn_fs_node_relation() for an alternative.
*/
svn_boolean_t
svn_fs_check_related(const svn_fs_id_t *id1,
]]]

- Julian
Received on 2015-03-10 13:18:53 CET

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