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;


Reply via email to