Author: stefan2
Date: Mon Dec 15 09:31:31 2014
New Revision: 1645605
URL: http://svn.apache.org/r1645605
Log:
On the fsx-id branch: Introduce a new noderev ID type instead of just using
the part ID to allow for tracking progress.
Add just enough functionality to make svn_fs_x__path_txn_node_rev() use the
new nodedev ID internally to construct the file name. Since the recent
introduction of unified changeset IDs (instead of txn and revision), the
noderev ID is unique and unchanging.
* subversion/libsvn_fs_x/id.h
(svn_fs_x__noderev_id_t): Define new ID type for noderevs.
(svn_fs_x__noderev_id_unparse): Declare similar to svn_fs_x__id_unparse.
(svn_fs_x__id_noderev_id): Update return value.
* subversion/libsvn_fs_x/id.c
(svn_fs_x__noderev_id_unparse): Implement similar to svn_fs_x__id_unparse.
(svn_fs_x__id_noderev_id): Update return value.
* subversion/libsvn_fs_x/util.c
(svn_fs_x__path_txn_node_rev): Construct the file name from the noderev ID
instead of node and branch ID.
Modified:
subversion/branches/fsx-id/subversion/libsvn_fs_x/id.c
subversion/branches/fsx-id/subversion/libsvn_fs_x/id.h
subversion/branches/fsx-id/subversion/libsvn_fs_x/util.c
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/id.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/id.c?rev=1645605&r1=1645604&r2=1645605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/id.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/id.c Mon Dec 15 09:31:31
2014
@@ -153,6 +153,17 @@ svn_fs_x__id_part_eq(const svn_fs_x__id_
return lhs->change_set == rhs->change_set && lhs->number == rhs->number;
}
+svn_string_t *
+svn_fs_x__noderev_id_unparse(const svn_fs_x__noderev_id_t *id,
+ apr_pool_t *pool)
+{
+ char string[2 * SVN_INT64_BUFFER_SIZE + 1];
+ char *p = part_unparse(string, id);
+
+ return svn_string_ncreate(string, p - string, pool);
+}
+
+
/* Accessing ID Pieces. */
@@ -184,8 +195,8 @@ svn_fs_x__id_txn_id(const svn_fs_id_t *f
}
-const svn_fs_x__id_part_t *
-svn_fs_x__id_noderev_id(const svn_fs_id_t *fs_id)
+const svn_fs_x__noderev_id_t *
+svn_fs_x__id_noderev_id(const svn_fs_id_t* fs_id)
{
const fs_x__id_t *id = (const fs_x__id_t *)fs_id;
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/id.h
URL:
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/id.h?rev=1645605&r1=1645604&r2=1645605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/id.h (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/id.h Mon Dec 15 09:31:31
2014
@@ -76,6 +76,9 @@ typedef struct svn_fs_x__id_part_t
apr_uint64_t number;
} svn_fs_x__id_part_t;
+/* Noderevs are identified by part IDs like everything else in FSX. */
+typedef svn_fs_x__id_part_t svn_fs_x__noderev_id_t;
+
/*** Operations on ID parts. ***/
@@ -87,6 +90,11 @@ svn_boolean_t svn_fs_x__id_part_is_root(
svn_boolean_t svn_fs_x__id_part_eq(const svn_fs_x__id_part_t *lhs,
const svn_fs_x__id_part_t *rhs);
+/* Convert ID into string form, allocated in POOL. */
+svn_string_t *
+svn_fs_x__noderev_id_unparse(const svn_fs_x__noderev_id_t *id,
+ apr_pool_t *pool);
+
/*** ID accessor functions. ***/
@@ -101,7 +109,7 @@ const svn_fs_x__id_part_t *svn_fs_x__id_
svn_fs_x__txn_id_t svn_fs_x__id_txn_id(const svn_fs_id_t *id);
/* Get the "noderev id" portion of ID. */
-const svn_fs_x__id_part_t *svn_fs_x__id_noderev_id(const svn_fs_id_t *id);
+const svn_fs_x__noderev_id_t *svn_fs_x__id_noderev_id(const svn_fs_id_t *id);
/* Get the "rev" portion of ID, or SVN_INVALID_REVNUM if it is a
transaction ID. */
Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/util.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/util.c?rev=1645605&r1=1645604&r2=1645605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/util.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/util.c Mon Dec 15
09:31:31 2014
@@ -388,16 +388,15 @@ svn_fs_x__path_txn_proto_rev_lock(svn_fs
const char *
svn_fs_x__path_txn_node_rev(svn_fs_t *fs,
- const svn_fs_id_t *id,
+ const svn_fs_id_t *fs_id,
apr_pool_t *pool)
{
- char *filename = (char *)svn_fs_x__id_unparse(id, pool)->data;
- *strrchr(filename, '.') = '\0';
+ const svn_fs_x__noderev_id_t *id = svn_fs_x__id_noderev_id(fs_id);
+ const char *filename = svn_fs_x__noderev_id_unparse(id, pool)->data;
+ apr_int64_t txn_id = svn_fs_x__get_txn_id(id->change_set);
- return svn_dirent_join(svn_fs_x__path_txn_dir(fs, svn_fs_x__id_txn_id(id),
- pool),
- apr_psprintf(pool, PATH_PREFIX_NODE "%s",
- filename),
+ return svn_dirent_join(svn_fs_x__path_txn_dir(fs, txn_id, pool),
+ apr_psprintf(pool, PATH_PREFIX_NODE "%s", filename),
pool);
}