Author: stefan2
Date: Tue Dec 23 16:10:57 2014
New Revision: 1647605

URL: http://svn.apache.org/r1647605
Log:
On the fsx-id branch:  Begin using our own dirent type within FSX.

There a number of reasons to do this:

- Decouple the implementation from the interface definition.
- Allow for getting rid of the svn_fs_id_t member within the struct
  while most times we would only need the dirents within FSX itself.
- Reduce the typical size of a dirent from 88 to 48 bytes under 64 bits.
  Compared to FSFS' 120 bytes, this grows RAM / cache capacity 2.5x.
- Eliminate ID construction and conversion overhead.

This patch will simply introduce dirent_t as a copy of svn_fs_dirent_t
and use it throughout FSX.  Convert at the interface.  Most of it is
one giant search & replace spree.

* subversion/libsvn_fs_x/fs.h
  (fs_x_data_t): Update commentary.
  (dirent_t): New struct, copied from svn_fs_dirent_t.

* subversion/libsvn_fs_x/cached_data.h
  (svn_fs_x__find_dir_entry,
   svn_fs_x__rep_contents_dir_entry): s/svn_fs_dirent_t/dirent_t/g

* subversion/libsvn_fs_x/cached_data.c
  (sorted,
   compare_dirent_name,
   read_dir_entries,
   get_dir_contents,
   svn_fs_x__find_dir_entry,
   svn_fs_x__rep_contents_dir_entry): Same.

* subversion/libsvn_fs_x/temp_serializer.h
  (svn_fs_x__extract_dir_entry,
   replace_baton_t,
   svn_fs_x__replace_dir_entry): Same.

* subversion/libsvn_fs_x/temp_serializer.c
  (dir_data_t,
   serialize_dir_entry,
   serialize_dir,
   deserialize_dir,
   find_entry,
   svn_fs_x__extract_dir_entry,
   slowly_replace_dir_entry,
   svn_fs_x__replace_dir_entry): Same.

* subversion/libsvn_fs_x/dag.h
  (svn_fs_x__dag_dir_entries,
   svn_fs_x__dag_dir_entry): Same.

* subversion/libsvn_fs_x/dag.c
  (dir_entry_id_from_node,
   svn_fs_x__dag_dir_entry,
   svn_fs_x__dag_delete,
   svn_fs_x__dag_delete_if_mutable): Same.

* subversion/libsvn_fs_x/transaction.c
  (unparse_dir_entry,
   unparse_dir_entries, 
   svn_fs_x__set_entry,
   write_directory_to_stream,
   write_final_rev): Same.

* subversion/libsvn_fs_x/tree.c
  (compare_dir_structure,
   merge): Same.
  (x_dir_entries): Convert from the internal dirent type to the FS API type.
  (crawl_directory_dag_for_mergeinfo,
   verify_node): s/svn_fs_dirent_t/dirent_t/g

Modified:
    subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c
    subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h
    subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c
    subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.h
    subversion/branches/fsx-id/subversion/libsvn_fs_x/fs.h
    subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.c
    subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.h
    subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c
    subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.c Tue Dec 23 
16:10:57 2014
@@ -2390,14 +2390,14 @@ svn_fs_x__get_file_delta_stream(svn_txde
   return SVN_NO_ERROR;
 }
 
-/* Return TRUE when all svn_fs_dirent_t* in ENTRIES are already sorted
+/* Return TRUE when all dirent_t* in ENTRIES are already sorted
    by their respective name. */
 static svn_boolean_t
 sorted(apr_array_header_t *entries)
 {
   int i;
 
-  const svn_fs_dirent_t * const *dirents = (const void *)entries->elts;
+  const dirent_t * const *dirents = (const void *)entries->elts;
   for (i = 0; i < entries->nelts-1; ++i)
     if (strcmp(dirents[i]->name, dirents[i+1]->name) > 0)
       return FALSE;
@@ -2409,8 +2409,8 @@ sorted(apr_array_header_t *entries)
 static int
 compare_dirents(const void *a, const void *b)
 {
-  const svn_fs_dirent_t *lhs = *((const svn_fs_dirent_t * const *) a);
-  const svn_fs_dirent_t *rhs = *((const svn_fs_dirent_t * const *) b);
+  const dirent_t *lhs = *((const dirent_t * const *) a);
+  const dirent_t *rhs = *((const dirent_t * const *) b);
 
   return strcmp(lhs->name, rhs->name);
 }
@@ -2419,7 +2419,7 @@ compare_dirents(const void *a, const voi
 static int
 compare_dirent_name(const void *a, const void *b)
 {
-  const svn_fs_dirent_t *lhs = *((const svn_fs_dirent_t * const *) a);
+  const dirent_t *lhs = *((const dirent_t * const *) a);
   const char *rhs = b;
 
   return strcmp(lhs->name, rhs);
@@ -2447,7 +2447,7 @@ read_dir_entries(apr_array_header_t *ent
   while (1)
     {
       svn_hash__entry_t entry;
-      svn_fs_dirent_t *dirent;
+      dirent_t *dirent;
       char *str;
 
       svn_pool_clear(iterpool);
@@ -2512,7 +2512,7 @@ read_dir_entries(apr_array_header_t *ent
       if (incremental)
         apr_hash_set(hash, entry.key, entry.keylen, dirent);
       else
-        APR_ARRAY_PUSH(entries, svn_fs_dirent_t *) = dirent;
+        APR_ARRAY_PUSH(entries, dirent_t *) = dirent;
     }
 
   /* Convert container to a sorted array. */
@@ -2520,7 +2520,7 @@ read_dir_entries(apr_array_header_t *ent
     {
       apr_hash_index_t *hi;
       for (hi = apr_hash_first(iterpool, hash); hi; hi = apr_hash_next(hi))
-        APR_ARRAY_PUSH(entries, svn_fs_dirent_t *) = apr_hash_this_val(hi);
+        APR_ARRAY_PUSH(entries, dirent_t *) = apr_hash_this_val(hi);
     }
 
   if (!sorted(entries))
@@ -2533,7 +2533,7 @@ read_dir_entries(apr_array_header_t *ent
 
 /* Fetch the contents of a directory into ENTRIES.  Values are stored
    as filename to string mappings; further conversion is necessary to
-   convert them into svn_fs_dirent_t values. */
+   convert them into dirent_t values. */
 static svn_error_t *
 get_dir_contents(apr_array_header_t **entries,
                  svn_fs_t *fs,
@@ -2544,7 +2544,7 @@ get_dir_contents(apr_array_header_t **en
   svn_stream_t *contents;
   const svn_fs_x__noderev_id_t *id = &noderev->noderev_id;
 
-  *entries = apr_array_make(result_pool, 16, sizeof(svn_fs_dirent_t *));
+  *entries = apr_array_make(result_pool, 16, sizeof(dirent_t *));
   if (noderev->data_rep
       && ! svn_fs_x__is_revision(noderev->data_rep->id.change_set))
     {
@@ -2651,18 +2651,18 @@ svn_fs_x__rep_contents_dir(apr_array_hea
   return SVN_NO_ERROR;
 }
 
-svn_fs_dirent_t *
+dirent_t *
 svn_fs_x__find_dir_entry(apr_array_header_t *entries,
                          const char *name,
                          int *hint)
 {
-  svn_fs_dirent_t **result
+  dirent_t **result
     = svn_sort__array_lookup(entries, name, hint, compare_dirent_name);
   return result ? *result : NULL;
 }
 
 svn_error_t *
-svn_fs_x__rep_contents_dir_entry(svn_fs_dirent_t **dirent,
+svn_fs_x__rep_contents_dir_entry(dirent_t **dirent,
                                  svn_fs_t *fs,
                                  node_revision_t *noderev,
                                  const char *name,
@@ -2690,8 +2690,8 @@ svn_fs_x__rep_contents_dir_entry(svn_fs_
   if (! found)
     {
       apr_array_header_t *entries;
-      svn_fs_dirent_t *entry;
-      svn_fs_dirent_t *entry_copy = NULL;
+      dirent_t *entry;
+      dirent_t *entry_copy = NULL;
 
       /* read the dir from the file system. It will probably be put it
          into the cache for faster lookup in future calls. */

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/cached_data.h Tue Dec 23 
16:10:57 2014
@@ -139,7 +139,7 @@ svn_fs_x__rep_contents_dir(apr_array_hea
    entry exists, return NULL.  If HINT is not NULL, set *HINT to the array
    index of the entry returned.  Successive calls in a linear scan scenario
    will be faster called with the same HINT variable. */
-svn_fs_dirent_t *
+dirent_t *
 svn_fs_x__find_dir_entry(apr_array_header_t *entries,
                          const char *name,
                          int *hint);
@@ -149,7 +149,7 @@ svn_fs_x__find_dir_entry(apr_array_heade
    be NULL. The returned object is allocated in RESULT_POOL; SCRATCH_POOL
    used for temporary allocations. */
 svn_error_t *
-svn_fs_x__rep_contents_dir_entry(svn_fs_dirent_t **dirent,
+svn_fs_x__rep_contents_dir_entry(dirent_t **dirent,
                                  svn_fs_t *fs,
                                  node_revision_t *noderev,
                                  const char *name,

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.c Tue Dec 23 16:10:57 
2014
@@ -378,7 +378,7 @@ dir_entry_id_from_node(const svn_fs_id_t
                        apr_pool_t *result_pool,
                        apr_pool_t *scratch_pool)
 {
-  svn_fs_dirent_t *dirent;
+  dirent_t *dirent;
 
   SVN_ERR(svn_fs_x__dag_dir_entry(&dirent, parent, name, result_pool,
                                   scratch_pool));
@@ -498,11 +498,11 @@ svn_fs_x__dag_dir_entries(apr_array_head
 }
 
 svn_error_t *
-svn_fs_x__dag_dir_entry(svn_fs_dirent_t **dirent,
-                         dag_node_t *node,
-                         const char* name,
-                         apr_pool_t *result_pool,
-                         apr_pool_t *scratch_pool)
+svn_fs_x__dag_dir_entry(dirent_t **dirent,
+                        dag_node_t *node,
+                        const char* name,
+                        apr_pool_t *result_pool,
+                        apr_pool_t *scratch_pool)
 {
   node_revision_t *noderev;
   SVN_ERR(get_node_revision(&noderev, node));
@@ -838,7 +838,7 @@ svn_fs_x__dag_delete(dag_node_t *parent,
 {
   node_revision_t *parent_noderev;
   svn_fs_t *fs = parent->fs;
-  svn_fs_dirent_t *dirent;
+  dirent_t *dirent;
   svn_fs_id_t *id;
   apr_pool_t *subpool;
 
@@ -936,7 +936,7 @@ svn_fs_x__dag_delete_if_mutable(svn_fs_t
       if (entries)
         for (i = 0; i < entries->nelts; ++i)
           SVN_ERR(svn_fs_x__dag_delete_if_mutable(fs,
-                        APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *)->id,
+                        APR_ARRAY_IDX(entries, i, dirent_t *)->id,
                         pool));
     }
 

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.h?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.h (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/dag.h Tue Dec 23 16:10:57 
2014
@@ -27,6 +27,7 @@
 #include "svn_delta.h"
 #include "private/svn_cache.h"
 
+#include "fs.h"
 #include "id.h"
 
 #ifdef __cplusplus
@@ -296,7 +297,7 @@ svn_fs_x__dag_open(dag_node_t **child_p,
 
 
 /* Set *ENTRIES_P to an array of NODE's entries, sorted by entry names,
-   and the values are svn_fs_dirent_t's.  The returned table (and elements)
+   and the values are dirent_t's.  The returned table (and elements)
    is allocated in POOL, which is also used for temporary allocations. */
 svn_error_t *svn_fs_x__dag_dir_entries(apr_array_header_t **entries_p,
                                        dag_node_t *node,
@@ -309,7 +310,7 @@ svn_error_t *svn_fs_x__dag_dir_entries(a
    Otherwise, the *DIRENT will be set to NULL.
  */
 /* ### This function is currently only called from dag.c. */
-svn_error_t * svn_fs_x__dag_dir_entry(svn_fs_dirent_t **dirent,
+svn_error_t * svn_fs_x__dag_dir_entry(dirent_t **dirent,
                                       dag_node_t *node,
                                       const char* name,
                                       apr_pool_t *result_pool,

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/fs.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/fs.h?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/fs.h (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/fs.h Tue Dec 23 16:10:57 
2014
@@ -288,7 +288,7 @@ typedef struct fs_x_data_t
 
   /* A cache of the contents of immutable directories; maps from
      unparsed FS ID to a apr_hash_t * mapping (const char *) dirent
-     names to (svn_fs_dirent_t *). */
+     names to (dirent_t *). */
   svn_cache__t *dir_cache;
 
   /* Fulltext cache; currently only used with memcached.  Maps from
@@ -532,6 +532,21 @@ typedef struct node_revision_t
 } node_revision_t;
 
 
+/** The type of a directory entry.  */
+typedef struct dirent_t
+{
+
+  /** The name of this directory entry.  */
+  const char *name;
+
+  /** The node revision ID it names.  */
+  const svn_fs_id_t *id;
+
+  /** The node kind. */
+  svn_node_kind_t kind;
+} dirent_t;
+
+
 /*** Change ***/
 typedef struct change_t
 {

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.c?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.c 
(original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.c Tue Dec 
23 16:10:57 2014
@@ -203,7 +203,7 @@ typedef struct dir_data_t
   apr_size_t len;
 
   /* reference to the entries */
-  svn_fs_dirent_t **entries;
+  dirent_t **entries;
 
   /* size of the serialized entries and don't be too wasteful
    * (needed since the entries are no longer in sequence) */
@@ -216,15 +216,15 @@ typedef struct dir_data_t
  */
 static void
 serialize_dir_entry(svn_temp_serializer__context_t *context,
-                    svn_fs_dirent_t **entry_p,
+                    dirent_t **entry_p,
                     apr_uint32_t *length)
 {
-  svn_fs_dirent_t *entry = *entry_p;
+  dirent_t *entry = *entry_p;
   apr_size_t initial_length = svn_temp_serializer__get_length(context);
 
   svn_temp_serializer__push(context,
                             (const void * const *)entry_p,
-                            sizeof(svn_fs_dirent_t));
+                            sizeof(dirent_t));
 
   svn_fs_x__id_serialize(context, &entry->id);
   svn_temp_serializer__add_string(context, &entry->name);
@@ -248,7 +248,7 @@ serialize_dir(apr_array_header_t *entrie
   /* calculate sizes */
   int count = entries->nelts;
   apr_size_t over_provision = 2 + count / 4;
-  apr_size_t entries_len = (count + over_provision) * sizeof(svn_fs_dirent_t*);
+  apr_size_t entries_len = (count + over_provision) * sizeof(dirent_t*);
   apr_size_t lengths_len = (count + over_provision) * sizeof(apr_uint32_t);
 
   /* copy the hash entries to an auxiliary struct of known layout */
@@ -259,7 +259,7 @@ serialize_dir(apr_array_header_t *entrie
   dir_data.lengths = apr_palloc(pool, lengths_len);
 
   for (i = 0; i < count; ++i)
-    dir_data.entries[i] = APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *);
+    dir_data.entries[i] = APR_ARRAY_IDX(entries, i, dirent_t *);
 
   /* Serialize that aux. structure into a new one. Also, provide a good
    * estimate for the size of the buffer that we will need. */
@@ -296,11 +296,11 @@ static apr_array_header_t *
 deserialize_dir(void *buffer, dir_data_t *dir_data, apr_pool_t *pool)
 {
   apr_array_header_t *result
-    = apr_array_make(pool, dir_data->count, sizeof(svn_fs_dirent_t *));
+    = apr_array_make(pool, dir_data->count, sizeof(dirent_t *));
   apr_size_t i;
   apr_size_t count;
-  svn_fs_dirent_t *entry;
-  svn_fs_dirent_t **entries;
+  dirent_t *entry;
+  dirent_t **entries;
 
   /* resolve the reference to the entries array */
   svn_temp_deserializer__resolve(buffer, (void **)&dir_data->entries);
@@ -317,7 +317,7 @@ deserialize_dir(void *buffer, dir_data_t
       svn_fs_x__id_deserialize(entry, (svn_fs_id_t **)&entry->id, pool);
 
       /* add the entry to the hash */
-      APR_ARRAY_PUSH(result, svn_fs_dirent_t *) = entry;
+      APR_ARRAY_PUSH(result, dirent_t *) = entry;
     }
 
   /* return the now complete hash */
@@ -794,7 +794,7 @@ svn_fs_x__get_sharded_offset(void **out,
  * the number of valid entries in ENTRIES.
  */
 static apr_size_t
-find_entry(svn_fs_dirent_t **entries,
+find_entry(dirent_t **entries,
            const char *name,
            apr_size_t count,
            svn_boolean_t *found)
@@ -806,7 +806,7 @@ find_entry(svn_fs_dirent_t **entries,
 
   for (middle = upper / 2; lower < upper; middle = (upper + lower) / 2)
     {
-      const svn_fs_dirent_t *entry =
+      const dirent_t *entry =
           svn_temp_deserializer__ptr(entries, (const void *const 
*)&entries[middle]);
       const char* entry_name =
           svn_temp_deserializer__ptr(entry, (const void *const *)&entry->name);
@@ -822,7 +822,7 @@ find_entry(svn_fs_dirent_t **entries,
   *found = FALSE;
   if (lower < count)
     {
-      const svn_fs_dirent_t *entry =
+      const dirent_t *entry =
           svn_temp_deserializer__ptr(entries, (const void *const 
*)&entries[lower]);
       const char* entry_name =
           svn_temp_deserializer__ptr(entry, (const void *const *)&entry->name);
@@ -846,7 +846,7 @@ svn_fs_x__extract_dir_entry(void **out,
   svn_boolean_t found;
 
   /* resolve the reference to the entries array */
-  const svn_fs_dirent_t * const *entries =
+  const dirent_t * const *entries =
     svn_temp_deserializer__ptr(data, (const void *const *)&dir_data->entries);
 
   /* resolve the reference to the lengths array */
@@ -854,7 +854,7 @@ svn_fs_x__extract_dir_entry(void **out,
     svn_temp_deserializer__ptr(data, (const void *const *)&dir_data->lengths);
 
   /* binary search for the desired entry by name */
-  apr_size_t pos = find_entry((svn_fs_dirent_t **)entries,
+  apr_size_t pos = find_entry((dirent_t **)entries,
                               name,
                               dir_data->count,
                               &found);
@@ -863,7 +863,7 @@ svn_fs_x__extract_dir_entry(void **out,
   *out = NULL;
   if (found)
     {
-      const svn_fs_dirent_t *source =
+      const dirent_t *source =
           svn_temp_deserializer__ptr(entries, (const void *const 
*)&entries[pos]);
 
       /* Entries have been serialized one-by-one, each time including all
@@ -874,13 +874,13 @@ svn_fs_x__extract_dir_entry(void **out,
       apr_size_t size = lengths[pos];
 
       /* copy & deserialize the entry */
-      svn_fs_dirent_t *new_entry = apr_palloc(pool, size);
+      dirent_t *new_entry = apr_palloc(pool, size);
       memcpy(new_entry, source, size);
 
       svn_temp_deserializer__resolve(new_entry, (void **)&new_entry->name);
       svn_fs_x__id_deserialize(new_entry, (svn_fs_id_t **)&new_entry->id,
                                pool);
-      *(svn_fs_dirent_t **)out = new_entry;
+      *(dirent_t **)out = new_entry;
     }
 
   return SVN_NO_ERROR;
@@ -899,7 +899,7 @@ slowly_replace_dir_entry(void **data,
   dir_data_t *dir_data = (dir_data_t *)*data;
   apr_array_header_t *dir;
   int idx = -1;
-  svn_fs_dirent_t *entry;
+  dirent_t *entry;
 
   SVN_ERR(svn_fs_x__deserialize_dir_entries((void **)&dir,
                                             *data,
@@ -913,7 +913,7 @@ slowly_replace_dir_entry(void **data,
     {
       /* Replace ENTRY with / insert the NEW_ENTRY */
       if (entry)
-        APR_ARRAY_IDX(dir, idx, svn_fs_dirent_t *) = replace_baton->new_entry;
+        APR_ARRAY_IDX(dir, idx, dirent_t *) = replace_baton->new_entry;
       else
         svn_sort__array_insert(dir, &replace_baton->new_entry, idx);
     }
@@ -936,7 +936,7 @@ svn_fs_x__replace_dir_entry(void **data,
   replace_baton_t *replace_baton = (replace_baton_t *)baton;
   dir_data_t *dir_data = (dir_data_t *)*data;
   svn_boolean_t found;
-  svn_fs_dirent_t **entries;
+  dirent_t **entries;
   apr_uint32_t *lengths;
   apr_uint32_t length;
   apr_size_t pos;
@@ -950,7 +950,7 @@ svn_fs_x__replace_dir_entry(void **data,
     return slowly_replace_dir_entry(data, data_len, baton, pool);
 
   /* resolve the reference to the entries array */
-  entries = (svn_fs_dirent_t **)
+  entries = (dirent_t **)
     svn_temp_deserializer__ptr((const char *)dir_data,
                                (const void *const *)&dir_data->entries);
 

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.h
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.h?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.h 
(original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/temp_serializer.h Tue Dec 
23 16:10:57 2014
@@ -212,7 +212,7 @@ svn_fs_x__get_sharded_offset(void **out,
 
 /**
  * Implements #svn_cache__partial_getter_func_t for a single
- * #svn_fs_dirent_t within a serialized directory contents hash,
+ * #dirent_t within a serialized directory contents hash,
  * identified by its name (const char @a *baton).
  */
 svn_error_t *
@@ -234,12 +234,12 @@ typedef struct replace_baton_t
   const char *name;
 
   /** directory entry to insert instead */
-  svn_fs_dirent_t *new_entry;
+  dirent_t *new_entry;
 } replace_baton_t;
 
 /**
  * Implements #svn_cache__partial_setter_func_t for a single
- * #svn_fs_dirent_t within a serialized directory contents hash,
+ * #dirent_t within a serialized directory contents hash,
  * identified by its name in the #replace_baton_t in @a baton.
  */
 svn_error_t *

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/transaction.c Tue Dec 23 
16:10:57 2014
@@ -817,7 +817,7 @@ store_sha1_rep_mapping(svn_fs_t *fs,
 }
 
 static svn_error_t *
-unparse_dir_entry(svn_fs_dirent_t *dirent,
+unparse_dir_entry(dirent_t *dirent,
                   svn_stream_t *stream,
                   apr_pool_t *pool)
 {
@@ -845,10 +845,10 @@ unparse_dir_entries(apr_array_header_t *
   int i;
   for (i = 0; i < entries->nelts; ++i)
     {
-      svn_fs_dirent_t *dirent;
+      dirent_t *dirent;
 
       svn_pool_clear(iterpool);
-      dirent = APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *);
+      dirent = APR_ARRAY_IDX(entries, i, dirent_t *);
       SVN_ERR(unparse_dir_entry(dirent, stream, iterpool));
     }
 
@@ -1766,7 +1766,7 @@ svn_fs_x__set_entry(svn_fs_t *fs,
   /* Append an incremental hash entry for the entry change. */
   if (id)
     {
-      svn_fs_dirent_t entry;
+      dirent_t entry;
       entry.name = name;
       entry.id = id;
       entry.kind = kind;
@@ -2556,7 +2556,7 @@ write_hash_to_stream(svn_stream_t *strea
   return SVN_NO_ERROR;
 }
 
-/* Implement collection_writer_t writing the svn_fs_dirent_t* array given
+/* Implement collection_writer_t writing the dirent_t* array given
    as BATON. */
 static svn_error_t *
 write_directory_to_stream(svn_stream_t *stream,
@@ -2865,8 +2865,7 @@ write_final_rev(const svn_fs_id_t **new_
                                          subpool));
       for (i = 0; i < entries->nelts; ++i)
         {
-          svn_fs_dirent_t *dirent
-            = APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *);
+          dirent_t *dirent = APR_ARRAY_IDX(entries, i, dirent_t *);
 
           svn_pool_clear(subpool);
           SVN_ERR(write_final_rev(&new_id, file, rev, fs, dirent->id,

Modified: subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c?rev=1647605&r1=1647604&r2=1647605&view=diff
==============================================================================
--- subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c (original)
+++ subversion/branches/fsx-id/subversion/libsvn_fs_x/tree.c Tue Dec 23 
16:10:57 2014
@@ -1773,10 +1773,8 @@ compare_dir_structure(svn_boolean_t *cha
      entries one-by-one without binary lookup etc. */
   for (i = 0; i < lhs_entries->nelts; ++i)
     {
-      svn_fs_dirent_t *lhs_entry
-        = APR_ARRAY_IDX(lhs_entries, i, svn_fs_dirent_t *);
-      svn_fs_dirent_t *rhs_entry
-        = APR_ARRAY_IDX(rhs_entries, i, svn_fs_dirent_t *);
+      dirent_t *lhs_entry = APR_ARRAY_IDX(lhs_entries, i, dirent_t *);
+      dirent_t *rhs_entry = APR_ARRAY_IDX(rhs_entries, i, dirent_t *);
 
       if (strcmp(lhs_entry->name, rhs_entry->name) == 0)
         {
@@ -2022,10 +2020,10 @@ merge(svn_stringbuf_t *conflict_p,
   iterpool = svn_pool_create(pool);
   for (i = 0; i < a_entries->nelts; ++i)
     {
-      svn_fs_dirent_t *s_entry, *t_entry, *a_entry;
+      dirent_t *s_entry, *t_entry, *a_entry;
       svn_pool_clear(iterpool);
 
-      a_entry = APR_ARRAY_IDX(a_entries, i, svn_fs_dirent_t *);
+      a_entry = APR_ARRAY_IDX(a_entries, i, dirent_t *);
       s_entry = svn_fs_x__find_dir_entry(s_entries, a_entry->name, &s_idx);
       t_entry = svn_fs_x__find_dir_entry(t_entries, a_entry->name, &t_idx);
 
@@ -2135,13 +2133,13 @@ merge(svn_stringbuf_t *conflict_p,
   /* For each entry E in source but not in ancestor */
   for (i = 0; i < s_entries->nelts; ++i)
     {
-      svn_fs_dirent_t *a_entry, *s_entry, *t_entry;
+      dirent_t *a_entry, *s_entry, *t_entry;
       dag_node_t *s_ent_node;
       apr_int64_t mergeinfo_s;
 
       svn_pool_clear(iterpool);
 
-      s_entry = APR_ARRAY_IDX(s_entries, i, svn_fs_dirent_t *);
+      s_entry = APR_ARRAY_IDX(s_entries, i, dirent_t *);
       a_entry = svn_fs_x__find_dir_entry(a_entries, s_entry->name, &s_idx);
       t_entry = svn_fs_x__find_dir_entry(t_entries, s_entry->name, &t_idx);
 
@@ -2469,8 +2467,14 @@ x_dir_entries(apr_hash_t **table_p,
   /* Convert directory array to hash. */
   for (i = 0; i < table->nelts; ++i)
     {
-      svn_fs_dirent_t *entry = APR_ARRAY_IDX(table, i, svn_fs_dirent_t *);
-      svn_hash_sets(hash, entry->name, entry);
+      dirent_t *entry = APR_ARRAY_IDX(table, i, dirent_t *);
+
+      svn_fs_dirent_t *api_dirent = apr_pcalloc(pool, sizeof(*api_dirent));
+      api_dirent->name = entry->name;
+      api_dirent->kind = entry->kind;
+      api_dirent->id = svn_fs_x__id_copy(entry->id, pool);
+
+      svn_hash_sets(hash, api_dirent->name, api_dirent);
     }
 
   *table_p = hash;
@@ -3779,7 +3783,7 @@ crawl_directory_dag_for_mergeinfo(svn_fs
   SVN_ERR(svn_fs_x__dag_dir_entries(&entries, dir_dag, scratch_pool));
   for (i = 0; i < entries->nelts; ++i)
     {
-      svn_fs_dirent_t *dirent = APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *);
+      dirent_t *dirent = APR_ARRAY_IDX(entries, i, dirent_t *);
       const char *kid_path;
       dag_node_t *kid_dag;
       svn_boolean_t has_mergeinfo, go_down;
@@ -4333,8 +4337,7 @@ verify_node(dag_node_t *node,
       /* Compute CHILDREN_MERGEINFO. */
       for (i = 0; i < entries->nelts; ++i)
         {
-          svn_fs_dirent_t *dirent
-            = APR_ARRAY_IDX(entries, i, svn_fs_dirent_t *);
+          dirent_t *dirent = APR_ARRAY_IDX(entries, i, dirent_t *);
           dag_node_t *child;
           apr_int64_t child_mergeinfo;
 


Reply via email to