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;