Author: stefan2
Date: Mon Jul 22 13:14:58 2013
New Revision: 1505677
URL: http://svn.apache.org/r1505677
Log:
On the fsfs-improvements branch: Prepare the code for the next mass change
that will change the FSFS ID API from strings to structs. Strive to reduce
the size of that patch.
* subversion/libsvn_fs_fs/id.h
(svn_fs_fs__id_is_txn): declare new API. This is already part of the
future API but does not depend on other changes.
* subversion/libsvn_fs_fs/id.c
(svn_fs_fs__id_is_txn): implement
* subversion/libsvn_fs_fs/cached_data.c
(get_node_revision_body,
locate_dir_cache): use new API
* subversion/libsvn_fs_fs/dag.c
(svn_fs_fs__dag_check_mutable): ditto
* subversion/libsvn_fs_fs/tree.c
(get_copy_inheritance): ditto
* subversion/libsvn_fs_fs/transaction.c
(svn_fs_fs__put_node_revision,
create_new_txn_noderev_from_rev,
set_representation): ditto
(is_txn_rep,
reset_txn_in_rep): new utilities to isolate the code from the
upcoming API change
(svn_fs_fs__set_entry,
get_shared_rep,
svn_fs_fs__set_proplist,
svn_fs_fs__delete_node_revision): use them
(write_final_rev): use all the ID API and utilities
Modified:
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/cached_data.c
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/dag.c
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.c
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.h
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/transaction.c
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/tree.c
Modified:
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/cached_data.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/cached_data.c?rev=1505677&r1=1505676&r2=1505677&view=diff
==============================================================================
--- subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/cached_data.c
(original)
+++ subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/cached_data.c
Mon Jul 22 13:14:58 2013
@@ -324,7 +324,7 @@ get_node_revision_body(node_revision_t *
if (is_cached)
return SVN_NO_ERROR;
- if (svn_fs_fs__id_txn_id(id))
+ if (svn_fs_fs__id_is_txn(id))
{
/* This is a transaction node-rev. */
err = svn_io_file_open(&revision_file,
@@ -1822,7 +1822,7 @@ locate_dir_cache(svn_fs_t *fs,
node_revision_t *noderev)
{
fs_fs_data_t *ffd = fs->fsap_data;
- return svn_fs_fs__id_txn_id(noderev->id)
+ return svn_fs_fs__id_is_txn(noderev->id)
? ffd->txn_dir_cache
: ffd->dir_cache;
}
Modified: subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/dag.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/dag.c?rev=1505677&r1=1505676&r2=1505677&view=diff
==============================================================================
--- subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/dag.c
(original)
+++ subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/dag.c Mon Jul
22 13:14:58 2013
@@ -175,7 +175,7 @@ get_node_revision(node_revision_t **node
svn_boolean_t svn_fs_fs__dag_check_mutable(const dag_node_t *node)
{
- return (svn_fs_fs__id_txn_id(svn_fs_fs__dag_get_id(node)) != NULL);
+ return svn_fs_fs__id_is_txn(svn_fs_fs__dag_get_id(node));
}
Modified: subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.c?rev=1505677&r1=1505676&r2=1505677&view=diff
==============================================================================
--- subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.c
(original)
+++ subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.c Mon Jul
22 13:14:58 2013
@@ -84,6 +84,13 @@ svn_fs_fs__id_offset(const svn_fs_id_t *
return pvt->offset;
}
+svn_boolean_t
+svn_fs_fs__id_is_txn(const svn_fs_id_t *id)
+{
+ id_private_t *pvt = id->fsap_data;
+
+ return pvt->txn_id != NULL;
+}
svn_string_t *
svn_fs_fs__id_unparse(const svn_fs_id_t *id,
Modified: subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.h
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.h?rev=1505677&r1=1505676&r2=1505677&view=diff
==============================================================================
--- subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.h
(original)
+++ subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/id.h Mon Jul
22 13:14:58 2013
@@ -49,6 +49,9 @@ svn_revnum_t svn_fs_fs__id_rev(const svn
ID. */
apr_off_t svn_fs_fs__id_offset(const svn_fs_id_t *id);
+/* Return TRUE, if this is a transaction ID. */
+svn_boolean_t svn_fs_fs__id_is_txn(const svn_fs_id_t *id);
+
/* Convert ID into string form, allocated in POOL. */
svn_string_t *svn_fs_fs__id_unparse(const svn_fs_id_t *id,
apr_pool_t *pool);
Modified:
subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/transaction.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/transaction.c?rev=1505677&r1=1505676&r2=1505677&view=diff
==============================================================================
--- subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/transaction.c
(original)
+++ subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/transaction.c
Mon Jul 22 13:14:58 2013
@@ -469,11 +469,10 @@ svn_fs_fs__put_node_revision(svn_fs_t *f
{
fs_fs_data_t *ffd = fs->fsap_data;
apr_file_t *noderev_file;
- const char *txn_id = svn_fs_fs__id_txn_id(id);
noderev->is_fresh_txn_root = fresh_txn_root;
- if (! txn_id)
+ if (! svn_fs_fs__id_is_txn(id))
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Attempted to write to non-transaction '%s'"),
svn_fs_fs__id_unparse(id, pool)->data);
@@ -868,7 +867,7 @@ create_new_txn_noderev_from_rev(svn_fs_t
SVN_ERR(svn_fs_fs__get_node_revision(&noderev, fs, src, pool));
- if (svn_fs_fs__id_txn_id(noderev->id))
+ if (svn_fs_fs__id_is_txn(noderev->id))
return svn_error_create(SVN_ERR_FS_CORRUPT, NULL,
_("Copying from transactions not allowed"));
@@ -1354,6 +1353,21 @@ svn_fs_fs__abort_txn(svn_fs_txn_t *txn,
return SVN_NO_ERROR;
}
+/* Return TRUE if the TXN_ID member of REP is in use.
+ */
+static svn_boolean_t
+is_txn_rep(const representation_t *rep)
+{
+ return rep->txn_id != NULL;
+}
+
+/* Mark the TXN_ID member of REP as "unused".
+ */
+static void
+reset_txn_in_rep(representation_t *rep)
+{
+ rep->txn_id = NULL;
+}
svn_error_t *
svn_fs_fs__set_entry(svn_fs_t *fs,
@@ -1372,7 +1386,7 @@ svn_fs_fs__set_entry(svn_fs_t *fs,
fs_fs_data_t *ffd = fs->fsap_data;
apr_pool_t *subpool = svn_pool_create(pool);
- if (!rep || !rep->txn_id)
+ if (!rep || !is_txn_rep(rep))
{
const char *unique_suffix;
apr_hash_t *entries;
@@ -1845,7 +1859,7 @@ get_shared_rep(representation_t **old_re
/* look for intra-revision matches (usually data reps but not limited
to them in case props happen to look like some data rep)
*/
- if (*old_rep == NULL && rep->txn_id)
+ if (*old_rep == NULL && is_txn_rep(rep))
{
svn_node_kind_t kind;
const char *file_name
@@ -1961,7 +1975,7 @@ set_representation(svn_stream_t **conten
{
struct rep_write_baton *wb;
- if (! svn_fs_fs__id_txn_id(noderev->id))
+ if (! svn_fs_fs__id_is_txn(noderev->id))
return svn_error_createf(SVN_ERR_FS_CORRUPT, NULL,
_("Attempted to write to non-transaction '%s'"),
svn_fs_fs__id_unparse(noderev->id, pool)->data);
@@ -2041,7 +2055,7 @@ svn_fs_fs__set_proplist(svn_fs_t *fs,
SVN_ERR(svn_io_file_close(file, pool));
/* Mark the node-rev's prop rep as mutable, if not already done. */
- if (!noderev->prop_rep || !noderev->prop_rep->txn_id)
+ if (!noderev->prop_rep || !is_txn_rep(noderev->prop_rep))
{
noderev->prop_rep = apr_pcalloc(pool, sizeof(*noderev->prop_rep));
noderev->prop_rep->txn_id = svn_fs_fs__id_txn_id(noderev->id);
@@ -2407,7 +2421,7 @@ write_final_rev(const svn_fs_id_t **new_
*new_id_p = NULL;
/* Check to see if this is a transaction node. */
- if (! svn_fs_fs__id_txn_id(id))
+ if (! svn_fs_fs__id_is_txn(id))
return SVN_NO_ERROR;
SVN_ERR(svn_fs_fs__get_node_revision(&noderev, fs, id, pool));
@@ -2444,7 +2458,7 @@ write_final_rev(const svn_fs_id_t **new_
}
svn_pool_destroy(subpool);
- if (noderev->data_rep && noderev->data_rep->txn_id)
+ if (noderev->data_rep && is_txn_rep(noderev->data_rep))
{
/* Write out the contents of this directory as a text rep. */
SVN_ERR(unparse_dir_entries(&str_entries, entries, pool));
@@ -2467,9 +2481,9 @@ write_final_rev(const svn_fs_id_t **new_
exists in a "this" state, gets rewritten to our new revision
num. */
- if (noderev->data_rep && noderev->data_rep->txn_id)
+ if (noderev->data_rep && is_txn_rep(noderev->data_rep))
{
- noderev->data_rep->txn_id = NULL;
+ reset_txn_in_rep(noderev->data_rep);
noderev->data_rep->revision = rev;
/* See issue 3845. Some unknown mechanism caused the
@@ -2483,12 +2497,12 @@ write_final_rev(const svn_fs_id_t **new_
}
/* Fix up the property reps. */
- if (noderev->prop_rep && noderev->prop_rep->txn_id)
+ if (noderev->prop_rep && is_txn_rep(noderev->prop_rep))
{
apr_hash_t *proplist;
SVN_ERR(svn_fs_fs__get_proplist(&proplist, fs, noderev, pool));
- noderev->prop_rep->txn_id = NULL;
+ reset_txn_in_rep(noderev->prop_rep);
noderev->prop_rep->revision = rev;
if (ffd->deltify_properties)
@@ -3139,12 +3153,12 @@ svn_fs_fs__delete_node_revision(svn_fs_t
SVN_ERR(svn_fs_fs__get_node_revision(&noderev, fs, id, pool));
/* Delete any mutable property representation. */
- if (noderev->prop_rep && noderev->prop_rep->txn_id)
+ if (noderev->prop_rep && is_txn_rep(noderev->prop_rep))
SVN_ERR(svn_io_remove_file2(svn_fs_fs__path_txn_node_props(fs, id, pool),
FALSE, pool));
/* Delete any mutable data representation. */
- if (noderev->data_rep && noderev->data_rep->txn_id
+ if (noderev->data_rep && is_txn_rep(noderev->data_rep)
&& noderev->kind == svn_node_dir)
{
fs_fs_data_t *ffd = fs->fsap_data;
Modified: subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/tree.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/tree.c?rev=1505677&r1=1505676&r2=1505677&view=diff
==============================================================================
--- subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/tree.c
(original)
+++ subversion/branches/fsfs-improvements/subversion/libsvn_fs_fs/tree.c Mon
Jul 22 13:14:58 2013
@@ -799,7 +799,7 @@ get_copy_inheritance(copy_id_inherit_t *
parent_copy_id = svn_fs_fs__id_copy_id(parent_id);
/* If this child is already mutable, we have nothing to do. */
- if (svn_fs_fs__id_txn_id(child_id))
+ if (svn_fs_fs__id_is_txn(child_id))
{
*inherit_p = copy_id_inherit_self;
*copy_src_path = NULL;