Author: stefan2
Date: Tue Apr 30 10:38:14 2013
New Revision: 1477542
URL: http://svn.apache.org/r1477542
Log:
On the fsfs-format7 branch:
catch up merge with /trunk up to and including r1477541
with no conflicts
Modified:
subversion/branches/fsfs-format7/ (props changed)
subversion/branches/fsfs-format7/build/generator/gen_base.py
subversion/branches/fsfs-format7/build/generator/templates/build-outputs.mk.ezt
subversion/branches/fsfs-format7/subversion/libsvn_delta/compose_delta.c
subversion/branches/fsfs-format7/subversion/libsvn_subr/cache-membuffer.c
subversion/branches/fsfs-format7/subversion/libsvn_subr/config.c
subversion/branches/fsfs-format7/subversion/libsvn_wc/conflicts.c
subversion/branches/fsfs-format7/subversion/libsvn_wc/props.c
subversion/branches/fsfs-format7/subversion/po/de.po
subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/random-test.c
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/range-index-test.h
Propchange: subversion/branches/fsfs-format7/
------------------------------------------------------------------------------
Merged /subversion/trunk:r1476665-1477541
Merged /subversion/branches/cache-server:r1458643
Modified: subversion/branches/fsfs-format7/build/generator/gen_base.py
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/build/generator/gen_base.py?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/build/generator/gen_base.py (original)
+++ subversion/branches/fsfs-format7/build/generator/gen_base.py Tue Apr 30
10:38:14 2013
@@ -241,6 +241,13 @@ class GeneratorBase:
@staticmethod
def write_errno_table():
+ # ### We generate errorcode.inc at autogen.sh time (here!).
+ # ###
+ # ### Currently it's only used by maintainer-mode builds. If this
+ # ### functionality ever moves to release builds, it will have to move
+ # ### to configure-time. (But then you have to solve two problems:
+ # ### what to do on windows, and what to do on unix when Python is not
+ # ### available at configure-time.)
import errno
fd = open('subversion/libsvn_subr/errorcode.inc', 'w')
fd.write('/* This file was generated by build/generator/gen_base.py
*/\n\n')
Modified:
subversion/branches/fsfs-format7/build/generator/templates/build-outputs.mk.ezt
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/build/generator/templates/build-outputs.mk.ezt?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
---
subversion/branches/fsfs-format7/build/generator/templates/build-outputs.mk.ezt
(original)
+++
subversion/branches/fsfs-format7/build/generator/templates/build-outputs.mk.ezt
Tue Apr 30 10:38:14 2013
@@ -45,6 +45,7 @@ MANPAGES =[for manpages] [manpages][end]
CLEAN_FILES =[for cfiles] [cfiles][end]
EXTRACLEAN_FILES =[for sql] [sql.header][end] \
+ $(abs_builddir)/subversion/libsvn_subr/errorcode.inc \
$(abs_srcdir)/compile_commands.json
SWIG_INCLUDES = -I$(abs_builddir)/subversion \
Modified:
subversion/branches/fsfs-format7/subversion/libsvn_delta/compose_delta.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_delta/compose_delta.c?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_delta/compose_delta.c
(original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_delta/compose_delta.c
Tue Apr 30 10:38:14 2013
@@ -648,15 +648,17 @@ copy_source_ops(apr_size_t offset, apr_s
{
const svn_txdelta_op_t *const op = &window->ops[op_ndx];
const apr_size_t *const off = &ndx->offs[op_ndx];
- apr_size_t fix_offset;
- apr_size_t fix_limit;
+ const apr_size_t fix_offset = (offset > off[0] ? offset - off[0] : 0);
+ const apr_size_t fix_limit = (off[1] > limit ? off[1] - limit : 0);
+ /* Ideally, we'd do this check before assigning fix_offset and
+ fix_limit; but then we couldn't make them const whilst still
+ adhering to C90 rules. Instead, we're going to assume that a
+ smart optimizing compiler will reorder this check before the
+ local variable initialization. */
if (off[0] >= limit)
break;
- fix_offset = (offset > off[0] ? offset - off[0] : 0);
- fix_limit = (off[1] > limit ? off[1] - limit : 0);
-
/* It would be extremely weird if the fixed-up op had zero length. */
assert(fix_offset + fix_limit < op->length);
@@ -701,23 +703,22 @@ copy_source_ops(apr_size_t offset, apr_s
apr_size_t tgt_off = target_offset;
assert(ptn_length > ptn_overlap);
- /* ### FIXME: ptn_overlap is unsigned, so the if() condition
- below is always true! Either it should be '> 0', or the
- code block should be unconditional. See also r842362. */
- if (ptn_overlap >= 0)
- {
- /* Issue second subrange in the pattern. */
- const apr_size_t length =
- MIN(op->length - fix_off - fix_limit,
- ptn_length - ptn_overlap);
- copy_source_ops(op->offset + ptn_overlap,
- op->offset + ptn_overlap + length,
- tgt_off,
- op_ndx,
- build_baton, window, ndx, pool);
- fix_off += length;
- tgt_off += length;
- }
+ /* Unconditionally issue the second subrange of the
+ pattern. This is always correct, since the outer
+ condition already verifies that there is an overlap
+ in the target copy. */
+ {
+ const apr_size_t length =
+ MIN(op->length - fix_off - fix_limit,
+ ptn_length - ptn_overlap);
+ copy_source_ops(op->offset + ptn_overlap,
+ op->offset + ptn_overlap + length,
+ tgt_off,
+ op_ndx,
+ build_baton, window, ndx, pool);
+ fix_off += length;
+ tgt_off += length;
+ }
assert(fix_off + fix_limit <= op->length);
if (ptn_overlap > 0
Modified:
subversion/branches/fsfs-format7/subversion/libsvn_subr/cache-membuffer.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/cache-membuffer.c?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/cache-membuffer.c
(original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/cache-membuffer.c
Tue Apr 30 10:38:14 2013
@@ -98,7 +98,7 @@
* comments in ensure_data_insertable_l2().
*
* To limit the entry size and management overhead, not the actual item keys
- * but only their MD5 checksums will not be stored. This is reasonably safe
+ * but only their MD5-based hashes will be stored. This is reasonably safe
* to do since users have only limited control over the full keys, even if
* these contain folder paths. So, it is very hard to deliberately construct
* colliding keys. Random checksum collisions can be shown to be extremely
@@ -888,9 +888,12 @@ get_group_index(svn_membuffer_t **cache,
{
svn_membuffer_t *segment0 = *cache;
- /* select the cache segment to use. they have all the same group_count */
- *cache = &segment0[key[0] & (segment0->segment_count -1)];
- return key[1] % segment0->group_count;
+ /* select the cache segment to use. they have all the same group_count.
+ * Since key may not be well-distributed, pre-fold it to a smaller but
+ * "denser" ranger. The divisors are primes larger than the largest
+ * counts. */
+ *cache = &segment0[(key[1] % 2809637ull) & (segment0->segment_count - 1)];
+ return (key[0] % 5030895599ull) % segment0->group_count;
}
/* Reduce the hit count of ENTRY and update the accumulated hit info
@@ -1011,6 +1014,8 @@ find_entry(svn_membuffer_t *cache,
*/
if (group->used == GROUP_SIZE)
{
+ static int count = 0;
+
/* every entry gets the same chance of being removed.
* Otherwise, we free the first entry, fill it and remove it
* again on the next occasion without considering the other
@@ -1032,6 +1037,7 @@ find_entry(svn_membuffer_t *cache,
let_entry_age(cache, entry);
drop_entry(cache, entry);
+ printf("%d\n", ++count);
}
/* initialize entry for the new key
@@ -2135,6 +2141,22 @@ membuffer_cache_set_partial(svn_membuffe
* svn_cache__t instance.
*/
+/* Stores the combined key value for the given key. It will be used by
+ * combine_key() to short-circuit expensive hash calculations.
+ */
+typedef struct last_access_key_t
+{
+ /* result of key combining */
+ entry_key_t combined_key;
+
+ /* length of the key (or APR_HASH_KEY_STRING if not used) */
+ apr_size_t key_len;
+
+ /* the original key. Only KEY_LEN bytes are valid. We use uint32 for
+ * better compatibility with pseudo-md5 functions. */
+ apr_uint32_t key[64];
+} last_access_key_t;
+
/* Internal cache structure (used in svn_cache__t.cache_internal) basically
* holding the additional parameters needed to call the respective membuffer
* functions.
@@ -2185,6 +2207,11 @@ typedef struct svn_membuffer_cache_t
*/
int alloc_counter;
+ /* cache for the last key used.
+ * Will be NULL for caches with short fix-sized keys.
+ */
+ last_access_key_t *last_access;
+
/* if enabled, this will serialize the access to this instance.
*/
svn_mutex__t *mutex;
@@ -2202,46 +2229,127 @@ typedef struct svn_membuffer_cache_t
*/
#define ALLOCATIONS_PER_POOL_CLEAR 10
-
/* Basically calculate a hash value for KEY of length KEY_LEN, combine it
* with the CACHE->PREFIX and write the result in CACHE->COMBINED_KEY.
+ * This could replace combine_key() entirely but we actually use it only
+ * when the quick path failed.
*/
static void
-combine_key(svn_membuffer_cache_t *cache,
- const void *key,
- apr_ssize_t key_len)
+combine_long_key(svn_membuffer_cache_t *cache,
+ const void *key,
+ apr_ssize_t key_len)
{
+ assert(cache->last_access);
+
+ /* handle variable-length keys */
if (key_len == APR_HASH_KEY_STRING)
key_len = strlen((const char *) key);
- if (key_len < 16)
+ /* same key as the last time? -> short-circuit */
+ if ( key_len == cache->last_access->key_len
+ && memcmp(key, cache->last_access->key, key_len) == 0)
{
- apr_uint32_t data[4] = { 0 };
- memcpy(data, key, key_len);
+ memcpy(cache->combined_key, cache->last_access->combined_key,
+ sizeof(cache->combined_key));
+ }
+ else if (key_len >= 64)
+ {
+ /* relatively long key. Use the generic, slow hash code for it */
+ apr_md5((unsigned char*)cache->combined_key, key, key_len);
+ cache->combined_key[0] ^= cache->prefix[0];
+ cache->combined_key[1] ^= cache->prefix[1];
- svn__pseudo_md5_15((apr_uint32_t *)cache->combined_key, data);
+ /* is the key short enough to cache the result? */
+ if (key_len <= sizeof(cache->last_access->key))
+ {
+ memcpy(cache->last_access->combined_key, cache->combined_key,
+ sizeof(cache->combined_key));
+ cache->last_access->key_len = key_len;
+ memcpy(cache->last_access->key, key, key_len);
+ }
}
- else if (key_len < 32)
+ else
{
- apr_uint32_t data[8] = { 0 };
- memcpy(data, key, key_len);
+ /* shorter keys use efficient hash code and *do* cache the results */
+ cache->last_access->key_len = key_len;
+ if (key_len < 16)
+ {
+ memset(cache->last_access->key, 0, 16);
+ memcpy(cache->last_access->key, key, key_len);
+
+ svn__pseudo_md5_15((apr_uint32_t *)cache->combined_key,
+ cache->last_access->key);
+ }
+ else if (key_len < 32)
+ {
+ memset(cache->last_access->key, 0, 32);
+ memcpy(cache->last_access->key, key, key_len);
+
+ svn__pseudo_md5_31((apr_uint32_t *)cache->combined_key,
+ cache->last_access->key);
+ }
+ else
+ {
+ memset(cache->last_access->key, 0, 64);
+ memcpy(cache->last_access->key, key, key_len);
+
+ svn__pseudo_md5_63((apr_uint32_t *)cache->combined_key,
+ cache->last_access->key);
+ }
+
+ cache->combined_key[0] ^= cache->prefix[0];
+ cache->combined_key[1] ^= cache->prefix[1];
+
+ memcpy(cache->last_access->combined_key, cache->combined_key,
+ sizeof(cache->combined_key));
+ }
+}
+
+/* Basically calculate a hash value for KEY of length KEY_LEN, combine it
+ * with the CACHE->PREFIX and write the result in CACHE->COMBINED_KEY.
+ */
+static void
+combine_key(svn_membuffer_cache_t *cache,
+ const void *key,
+ apr_ssize_t key_len)
+{
+ /* copy of *key, padded with 0 */
+ apr_uint64_t data[2];
- svn__pseudo_md5_31((apr_uint32_t *)cache->combined_key, data);
+ /* short, fixed-size keys are the most common case */
+ if (key_len == 16)
+ {
+ data[0] = ((const apr_uint64_t *)key)[0];
+ data[1] = ((const apr_uint64_t *)key)[1];
}
- else if (key_len < 64)
+ else if (key_len == 8)
{
- apr_uint32_t data[16] = { 0 };
+ data[0] = ((const apr_uint64_t *)key)[0];
+ data[1] = 0;
+ }
+ else if (key_len != APR_HASH_KEY_STRING && key_len < 16)
+ {
+ data[0] = 0;
+ data[1] = 0;
memcpy(data, key, key_len);
-
- svn__pseudo_md5_63((apr_uint32_t *)cache->combined_key, data);
}
else
{
- apr_md5((unsigned char*)cache->combined_key, key, key_len);
+ /* longer or variably sized keys */
+ combine_long_key(cache, key, key_len);
+ return;
}
- cache->combined_key[0] ^= cache->prefix[0];
- cache->combined_key[1] ^= cache->prefix[1];
+ /* scramble key DATA. All of this must be reversible to prevent key
+ * collisions. So, we limit ourselves to xor and permutations. */
+ data[1] = (data[1] << 27) | (data[1] >> 37);
+ data[1] ^= data[0] & 0xffff;
+ data[0] ^= data[1] & 0xffffffffffff0000ull;
+ data[0] = (data[0] << 43) | (data[0] >> 21);
+
+ /* combine with this cache's namespace */
+ cache->combined_key[0] = data[0] ^ cache->prefix[0];
+ cache->combined_key[1] = data[1] ^ cache->prefix[1];
}
/* Implement svn_cache__vtable_t.get (not thread-safe)
@@ -2712,6 +2820,18 @@ svn_cache__create_membuffer_cache(svn_ca
pool));
memcpy(cache->prefix, checksum->digest, sizeof(cache->prefix));
+ /* fix-length keys of 16 bytes or under don't need a buffer because we
+ * can use a very fast key combining algorithm. */
+ if ((klen == APR_HASH_KEY_STRING) || klen > sizeof(entry_key_t))
+ {
+ cache->last_access = apr_pcalloc(pool, sizeof(*cache->last_access));
+ cache->last_access->key_len = APR_HASH_KEY_STRING;
+ }
+ else
+ {
+ cache->last_access = NULL;
+ }
+
#ifdef SVN_DEBUG_CACHE_MEMBUFFER
/* Initialize cache debugging support.
Modified: subversion/branches/fsfs-format7/subversion/libsvn_subr/config.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_subr/config.c?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_subr/config.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_subr/config.c Tue Apr 30
10:38:14 2013
@@ -188,7 +188,8 @@ read_all(svn_config_t **cfgp,
#ifdef WIN32
if (sys_registry_path)
{
- SVN_ERR(svn_config_read2(cfgp, sys_registry_path, FALSE, FALSE, pool));
+ SVN_ERR(svn_config_read3(cfgp, sys_registry_path, FALSE, FALSE, FALSE,
+ pool));
red_config = TRUE;
}
#endif /* WIN32 */
@@ -214,8 +215,8 @@ read_all(svn_config_t **cfgp,
SVN_ERR(svn_config_merge(*cfgp, usr_registry_path, FALSE));
else
{
- SVN_ERR(svn_config_read2(cfgp, usr_registry_path,
- FALSE, FALSE, pool));
+ SVN_ERR(svn_config_read3(cfgp, usr_registry_path,
+ FALSE, FALSE, FALSE, pool));
red_config = TRUE;
}
}
Modified: subversion/branches/fsfs-format7/subversion/libsvn_wc/conflicts.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_wc/conflicts.c?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_wc/conflicts.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_wc/conflicts.c Tue Apr
30 10:38:14 2013
@@ -2302,6 +2302,46 @@ svn_wc__read_conflicts(const apr_array_h
/*** Resolving a conflict automatically ***/
+/* Prepare to delete an artifact file at ARTIFACT_FILE_ABSPATH in the
+ * working copy at DB/WRI_ABSPATH.
+ *
+ * Set *WORK_ITEMS to a new work item that, when run, will delete the
+ * artifact file; or to NULL if there is no file to delete.
+ *
+ * Set *FILE_FOUND to TRUE if the artifact file is found on disk and its
+ * node kind is 'file'; otherwise do not change *FILE_FOUND. FILE_FOUND
+ * may be NULL if not required.
+ */
+static svn_error_t *
+remove_artifact_file_if_exists(svn_skel_t **work_items,
+ svn_boolean_t *file_found,
+ svn_wc__db_t *db,
+ const char *wri_abspath,
+ const char *artifact_file_abspath,
+ apr_pool_t *result_pool,
+ apr_pool_t *scratch_pool)
+{
+ *work_items = NULL;
+ if (artifact_file_abspath)
+ {
+ svn_node_kind_t node_kind;
+
+ SVN_ERR(svn_io_check_path(artifact_file_abspath, &node_kind,
+ scratch_pool));
+ if (node_kind == svn_node_file)
+ {
+ SVN_ERR(svn_wc__wq_build_file_remove(work_items,
+ db, wri_abspath,
+ artifact_file_abspath,
+ result_pool, scratch_pool));
+ if (file_found)
+ *file_found = TRUE;
+ }
+ }
+
+ return SVN_NO_ERROR;
+}
+
/*
* Resolve the text conflict found in DB/LOCAL_ABSPATH/CONFLICTS
* according to CONFLICT_CHOICE. (Don't mark it as resolved.)
@@ -2332,7 +2372,6 @@ resolve_text_conflict_on_node(svn_boolea
const char *conflict_new = NULL;
const char *conflict_working = NULL;
const char *auto_resolve_src;
- svn_node_kind_t node_kind;
svn_skel_t *work_item;
SVN_ERR(svn_wc__conflict_read_text_conflict(&conflict_working,
@@ -2425,47 +2464,20 @@ resolve_text_conflict_on_node(svn_boolea
If not the UI shows the conflict as already resolved
(and in this case we just remove the in-db conflict) */
- if (conflict_old)
- {
- SVN_ERR(svn_io_check_path(conflict_old, &node_kind, scratch_pool));
- if (node_kind == svn_node_file)
- {
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db,
- local_abspath,
- conflict_old,
- scratch_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
- *removed_reject_files = TRUE;
- }
- }
-
- if (conflict_new)
- {
- SVN_ERR(svn_io_check_path(conflict_new, &node_kind, scratch_pool));
- if (node_kind == svn_node_file)
- {
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db,
- local_abspath,
- conflict_new,
- scratch_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
- *removed_reject_files = TRUE;
- }
- }
-
- if (conflict_working)
- {
- SVN_ERR(svn_io_check_path(conflict_working, &node_kind, scratch_pool));
- if (node_kind == svn_node_file)
- {
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db,
- local_abspath,
- conflict_working,
- scratch_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
- *removed_reject_files = TRUE;
- }
- }
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, removed_reject_files,
+ db, local_abspath, conflict_old,
+ scratch_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
+
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, removed_reject_files,
+ db, local_abspath, conflict_new,
+ scratch_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
+
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, removed_reject_files,
+ db, local_abspath, conflict_working,
+ scratch_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
return SVN_NO_ERROR;
}
@@ -2518,7 +2530,6 @@ resolve_prop_conflict_on_node(svn_boolea
svn_wc_conflict_choice_t conflict_choice,
apr_pool_t *scratch_pool)
{
- svn_node_kind_t node_kind;
const char *prop_reject_file;
apr_hash_t *mine_props;
apr_hash_t *their_old_props;
@@ -2601,21 +2612,14 @@ resolve_prop_conflict_on_node(svn_boolea
If not the UI shows the conflict as already resolved
(and in this case we just remove the in-db conflict) */
- if (prop_reject_file)
- {
- SVN_ERR(svn_io_check_path(prop_reject_file, &node_kind, scratch_pool));
- if (node_kind == svn_node_file)
- {
- svn_skel_t *work_item;
+ {
+ svn_skel_t *work_item;
- SVN_ERR(svn_wc__wq_build_file_remove(&work_item, db,
- local_abspath,
- prop_reject_file,
- scratch_pool, scratch_pool));
- *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
- *removed_reject_file = TRUE;
- }
- }
+ SVN_ERR(remove_artifact_file_if_exists(&work_item, removed_reject_file,
+ db, local_abspath, prop_reject_file,
+ scratch_pool, scratch_pool));
+ *work_items = svn_wc__wq_merge(*work_items, work_item, scratch_pool);
+ }
return SVN_NO_ERROR;
}
Modified: subversion/branches/fsfs-format7/subversion/libsvn_wc/props.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/libsvn_wc/props.c?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/libsvn_wc/props.c (original)
+++ subversion/branches/fsfs-format7/subversion/libsvn_wc/props.c Tue Apr 30
10:38:14 2013
@@ -1626,9 +1626,9 @@ validate_eol_prop_against_file(const cha
if (mime_type && svn_mime_type_is_binary(mime_type->data))
return svn_error_createf
(SVN_ERR_ILLEGAL_TARGET, NULL,
- _("Can't set '" SVN_PROP_EOL_STYLE "': "
+ _("Can't set '%s': "
"file '%s' has binary mime type property"),
- path_display);
+ SVN_PROP_EOL_STYLE, path_display);
/* Now ask the getter for the contents of the file; this will do a
newline translation. All we really care about here is whether or
Modified: subversion/branches/fsfs-format7/subversion/po/de.po
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/po/de.po?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/po/de.po [UTF-8] (original)
+++ subversion/branches/fsfs-format7/subversion/po/de.po [UTF-8] Tue Apr 30
10:38:14 2013
@@ -14369,7 +14369,7 @@ msgid ""
msgstr ""
"Aktiviert oder deaktiviert die Zwischenspeicherung von\n"
" Deltas zwischen älteren Revisionen.\n"
-" Vorgabe ist »yes«.\n"
+" Vorgabe ist »no«.\n"
" [nur für FSFS-Projektarchive verwendet]"
#: ../svnserve/svnserve.c:227
Modified: subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
--- subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c (original)
+++ subversion/branches/fsfs-format7/subversion/svnadmin/svnadmin.c Tue Apr 30
10:38:14 2013
@@ -1161,6 +1161,7 @@ subcommand_load(apr_getopt_t *os, void *
svn_error_t *err;
struct svnadmin_opt_state *opt_state = baton;
svn_repos_t *repos;
+ apr_file_t *file;
svn_revnum_t lower = SVN_INVALID_REVNUM, upper = SVN_INVALID_REVNUM;
svn_stream_t *stdin_stream, *stdout_stream = NULL;
@@ -1193,6 +1194,10 @@ subcommand_load(apr_getopt_t *os, void *
/* Read the stream from STDIN. Users can redirect a file. */
SVN_ERR(svn_stream_for_stdin(&stdin_stream, pool));
+/* SVN_ERR(svn_io_file_open(&file,
"/home/stefan/develop/fsfs-format7/freebsd.dump",
+ APR_READ |APR_BUFFERED,
+ APR_OS_DEFAULT, pool));
+ stdin_stream = svn_stream_from_aprfile2(file, TRUE, pool);*/
/* Progress feedback goes to STDOUT, unless they asked to suppress it. */
if (! opt_state->quiet)
Modified:
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/random-test.c
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/random-test.c?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
---
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/random-test.c
(original)
+++
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/random-test.c
Tue Apr 30 10:38:14 2013
@@ -500,6 +500,8 @@ random_combine_test(apr_pool_t *pool)
{
apr_uint32_t seed;
svn_error_t *err = do_random_combine_test(pool, &seed);
+ if (err)
+ fprintf(stderr, "SEED: %lu\n", (unsigned long)seed);
return err;
}
Modified:
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/range-index-test.h
URL:
http://svn.apache.org/viewvc/subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/range-index-test.h?rev=1477542&r1=1477541&r2=1477542&view=diff
==============================================================================
---
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/range-index-test.h
(original)
+++
subversion/branches/fsfs-format7/subversion/tests/libsvn_delta/range-index-test.h
Tue Apr 30 10:38:14 2013
@@ -27,7 +27,7 @@
#include "../../libsvn_delta/compose_delta.c"
static range_index_node_t *prev_node, *prev_prev_node;
-static apr_off_t
+static apr_size_t
walk_range_index(range_index_node_t *node, const char **msg)
{
apr_off_t ret;
@@ -70,19 +70,18 @@ print_node_data(range_index_node_t *node
{
if (-node->target_offset == ndx)
{
- printf(" * Node: [%3"APR_OFF_T_FMT
- ",%3"APR_OFF_T_FMT
- ") = %-5"APR_OFF_T_FMT"%s\n",
+ printf(" * Node: [%3"APR_SIZE_T_FMT
+ ",%3"APR_SIZE_T_FMT
+ ") = %-5"APR_SIZE_T_FMT"%s\n",
node->offset, node->limit, -node->target_offset, msg);
}
else
{
- printf(" Node: [%3"APR_OFF_T_FMT
- ",%3"APR_OFF_T_FMT
- ") = %"APR_OFF_T_FMT"\n",
+ printf(" Node: [%3"APR_SIZE_T_FMT
+ ",%3"APR_SIZE_T_FMT
+ ") = %"APR_SIZE_T_FMT"\n",
node->offset, node->limit,
- (node->target_offset < 0
- ? -node->target_offset : node->target_offset));
+ node->target_offset);
}
}
@@ -154,13 +153,13 @@ random_range_index_test(apr_pool_t *pool
ndx = create_range_index(pool);
for (i = 1; i <= iterations; ++i)
{
- apr_off_t offset = svn_test_rand(&seed) % 47;
- apr_off_t limit = offset + svn_test_rand(&seed) % 16 + 1;
+ apr_size_t offset = svn_test_rand(&seed) % 47;
+ apr_size_t limit = offset + svn_test_rand(&seed) % 16 + 1;
range_list_node_t *list, *r;
- apr_off_t ret;
+ apr_size_t ret;
const char *msg2;
- printf("%3d: Inserting [%3"APR_OFF_T_FMT",%3"APR_OFF_T_FMT") ...",
+ printf("%3d: Inserting [%3"APR_SIZE_T_FMT",%3"APR_SIZE_T_FMT") ...",
i, offset, limit);
splay_range_index(offset, ndx);
list = build_range_list(offset, limit, ndx);
@@ -170,7 +169,7 @@ random_range_index_test(apr_pool_t *pool
if (ret == 0)
{
for (r = list; r; r = r->next)
- printf(" %s[%3"APR_OFF_T_FMT",%3"APR_OFF_T_FMT")",
+ printf(" %s[%3"APR_SIZE_T_FMT",%3"APR_SIZE_T_FMT")",
(r->kind == range_from_source ?
(++src_cp, "S") : (++tgt_cp, "T")),
r->offset, r->limit);