You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by pb...@apache.org on 2012/10/06 05:59:38 UTC
svn commit: r1394915 [7/7] - in /subversion/branches/inheritable-props: ./
build/ build/ac-macros/ subversion/bindings/swig/
subversion/bindings/swig/include/
subversion/bindings/swig/perl/libsvn_swig_perl/
subversion/bindings/swig/perl/native/ subvers...
Modified: subversion/branches/inheritable-props/subversion/svnserve/main.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnserve/main.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnserve/main.c (original)
+++ subversion/branches/inheritable-props/subversion/svnserve/main.c Sat Oct 6 03:59:33 2012
@@ -149,6 +149,7 @@ void winservice_notify_stop(void)
#define SVNSERVE_OPT_CACHE_FULLTEXTS 266
#define SVNSERVE_OPT_CACHE_REVPROPS 267
#define SVNSERVE_OPT_SINGLE_CONN 268
+#define SVNSERVE_OPT_CLIENT_SPEED 269
static const apr_getopt_option_t svnserve__options[] =
{
@@ -235,6 +236,16 @@ static const apr_getopt_option_t svnserv
"Default is no.\n"
" "
"[used for FSFS repositories only]")},
+ {"client-speed", SVNSERVE_OPT_CLIENT_SPEED, 1,
+ N_("Optimize throughput based on the assumption that\n"
+ " "
+ "clients can receive data with a bitrate of at\n"
+ " "
+ "least ARG Gbit/s. For clients receiving data at\n"
+ " "
+ "less than 1 Gbit/s, zero should be used.\n"
+ " "
+ "Default is 0 (optimizations disabled).")},
#ifdef CONNECTION_HAVE_THREAD_OPTION
/* ### Making the assumption here that WIN32 never has fork and so
* ### this option never exists when --service exists. */
@@ -497,6 +508,8 @@ int main(int argc, const char *argv[])
params.cache_fulltexts = TRUE;
params.cache_txdeltas = FALSE;
params.cache_revprops = FALSE;
+ params.zero_copy_limit = 0;
+ params.error_check_interval = 4096;
while (1)
{
@@ -645,6 +658,18 @@ int main(int argc, const char *argv[])
= svn_tristate__from_word(arg) == svn_tristate_true;
break;
+ case SVNSERVE_OPT_CLIENT_SPEED:
+ {
+ apr_size_t bandwidth = (apr_size_t)apr_strtoi64(arg, NULL, 0);
+
+ /* block other clients for at most 1 ms (at full bandwidth) */
+ params.zero_copy_limit = bandwidth * 120000;
+
+ /* check for aborted connections at the same rate */
+ params.error_check_interval = bandwidth * 120000;
+ }
+ break;
+
#ifdef WIN32
case SVNSERVE_OPT_SERVICE:
if (run_mode != run_mode_service)
@@ -755,8 +780,10 @@ int main(int argc, const char *argv[])
* the pool cleanup handlers that call sasl_dispose() (connection_pool)
* and sasl_done() (pool) are run in the right order. See issue #3664. */
connection_pool = svn_pool_create(pool);
- conn = svn_ra_svn_create_conn2(NULL, in_file, out_file,
+ conn = svn_ra_svn_create_conn3(NULL, in_file, out_file,
params.compression_level,
+ params.zero_copy_limit,
+ params.error_check_interval,
connection_pool);
svn_error_clear(serve(conn, ¶ms, connection_pool));
exit(0);
@@ -988,8 +1015,10 @@ int main(int argc, const char *argv[])
/* It's not a fatal error if we cannot enable keep-alives. */
}
- conn = svn_ra_svn_create_conn2(usock, NULL, NULL,
+ conn = svn_ra_svn_create_conn3(usock, NULL, NULL,
params.compression_level,
+ params.zero_copy_limit,
+ params.error_check_interval,
connection_pool);
if (run_mode == run_mode_listen_once)
Modified: subversion/branches/inheritable-props/subversion/svnserve/serve.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnserve/serve.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnserve/serve.c (original)
+++ subversion/branches/inheritable-props/subversion/svnserve/serve.c Sat Oct 6 03:59:33 2012
@@ -886,13 +886,14 @@ static svn_error_t *accept_report(svn_bo
/* Make an svn_repos report baton. Tell it to drive the network editor
* when the report is complete. */
svn_ra_svn_get_editor(&editor, &edit_baton, conn, pool, NULL, NULL);
- SVN_CMD_ERR(svn_repos_begin_report2(&report_baton, rev, b->repos,
+ SVN_CMD_ERR(svn_repos_begin_report3(&report_baton, rev, b->repos,
b->fs_path->data, target, tgt_path,
text_deltas, depth, ignore_ancestry,
send_copyfrom_args,
editor, edit_baton,
authz_check_access_cb_func(b),
- b, pool));
+ b, svn_ra_svn_zero_copy_limit(conn),
+ pool));
rb.sb = b;
rb.repos_url = svn_path_uri_decode(b->repos_url, pool);
@@ -3367,7 +3368,7 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
/* Send greeting. We don't support version 1 any more, so we can
* send an empty mechlist. */
if (params->compression_level > 0)
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwwww)",
+ SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwwwww)",
(apr_uint64_t) 2, (apr_uint64_t) 2,
SVN_RA_SVN_CAP_EDIT_PIPELINE,
SVN_RA_SVN_CAP_SVNDIFF1,
@@ -3377,9 +3378,10 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
SVN_RA_SVN_CAP_LOG_REVPROPS,
SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
SVN_RA_SVN_CAP_PARTIAL_REPLAY,
- SVN_RA_SVN_CAP_INHERITED_PROPS));
+ SVN_RA_SVN_CAP_INHERITED_PROPS,
+ SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS));
else
- SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwww)",
+ SVN_ERR(svn_ra_svn_write_cmd_response(conn, pool, "nn()(wwwwwwwww)",
(apr_uint64_t) 2, (apr_uint64_t) 2,
SVN_RA_SVN_CAP_EDIT_PIPELINE,
SVN_RA_SVN_CAP_ABSENT_ENTRIES,
@@ -3388,7 +3390,8 @@ svn_error_t *serve(svn_ra_svn_conn_t *co
SVN_RA_SVN_CAP_LOG_REVPROPS,
SVN_RA_SVN_CAP_ATOMIC_REVPROPS,
SVN_RA_SVN_CAP_PARTIAL_REPLAY,
- SVN_RA_SVN_CAP_INHERITED_PROPS));
+ SVN_RA_SVN_CAP_INHERITED_PROPS,
+ SVN_RA_SVN_CAP_EPHEMERAL_TXNPROPS));
/* Read client response, which we assume to be in version 2 format:
* version, capability list, and client URL; then we do an auth
Modified: subversion/branches/inheritable-props/subversion/svnserve/server.h
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/svnserve/server.h?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/svnserve/server.h (original)
+++ subversion/branches/inheritable-props/subversion/svnserve/server.h Sat Oct 6 03:59:33 2012
@@ -128,6 +128,13 @@ typedef struct serve_params_t {
Defaults to SVN_DELTA_COMPRESSION_LEVEL_DEFAULT. */
int compression_level;
+ /* Item size up to which we use the zero-copy code path to transmit
+ them over the network. 0 disables that code path. */
+ apr_size_t zero_copy_limit;
+
+ /* Amount of data to send between checks for cancellation requests
+ coming in from the client. */
+ apr_size_t error_check_interval;
} serve_params_t;
/* Serve the connection CONN according to the parameters PARAMS. */
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/merge_tree_conflict_tests.py Sat Oct 6 03:59:33 2012
@@ -1671,7 +1671,6 @@ def merge_replace_setup(sbox):
#----------------------------------------------------------------------
# ra_serf causes duplicate notifications with this test:
-@XFail(svntest.main.is_ra_type_dav_serf)
@Issue(3802)
def merge_replace_causes_tree_conflict(sbox):
"replace vs. edit tree-conflicts"
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/mergeinfo_tests.py Sat Oct 6 03:59:33 2012
@@ -70,23 +70,10 @@ def no_mergeinfo(sbox):
sbox.build(create_wc=False)
sbox.simple_repo_copy('A', 'A2')
svntest.actions.run_and_verify_mergeinfo(adjust_error_for_server_version(""),
- "\n".join(
-[" youngest last repos."] +
-[" common full tip of path of"] +
-[" ancestor merge branch branch"] +
-[""] +
-[" 1 2 "] +
-[" | | "] +
-[" ----------| ... |------------- A"] +
-[" \ "] +
-[" \ "] +
-[" -----| ... |------------- A2"] +
-[" | "] +
-[" WC "] +
-[""]
- ),
+ [],
sbox.repo_url + '/A',
- sbox.repo_url + '/A2')
+ sbox.repo_url + '/A2',
+ "--show-revs=merged")
def mergeinfo(sbox):
"'mergeinfo' on a path with mergeinfo"
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/patch_tests.py Sat Oct 6 03:59:33 2012
@@ -4099,6 +4099,61 @@ def patch_add_and_delete(sbox):
1, # check-props
1) # dry-run
+
+def patch_git_with_index_line(sbox):
+ "apply git patch with 'index' line"
+
+ sbox.build(read_only = True)
+ wc_dir = sbox.wc_dir
+ patch_file_path = make_patch_path(sbox)
+
+ unidiff_patch = [
+ "diff --git a/src/tools/ConsoleRunner/hi.txt b/src/tools/ConsoleRunner/hi.txt\n",
+ "new file mode 100644\n",
+ "index 0000000..c82a38f\n",
+ "--- /dev/null\n",
+ "+++ b/src/tools/ConsoleRunner/hi.txt\n",
+ "@@ -0,0 +1 @@\n",
+ "+hihihihihihi\n",
+ "\ No newline at end of file\n",
+ ]
+
+ svntest.main.file_write(patch_file_path, ''.join(unidiff_patch))
+
+ expected_output = [
+ 'A %s\n' % sbox.ospath('src'),
+ 'A %s\n' % sbox.ospath('src/tools'),
+ 'A %s\n' % sbox.ospath('src/tools/ConsoleRunner'),
+ 'A %s\n' % sbox.ospath('src/tools/ConsoleRunner/hi.txt'),
+ ]
+
+ expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
+ expected_status.add({
+ 'src/' : Item(status='A ', wc_rev=0),
+ 'src/tools' : Item(status='A ', wc_rev=0),
+ 'src/tools/ConsoleRunner/' : Item(status='A ', wc_rev=0),
+ 'src/tools/ConsoleRunner/hi.txt' : Item(status='A ', wc_rev=0),
+ })
+
+ expected_disk = svntest.main.greek_state.copy()
+ expected_disk.add({'src' : Item(),
+ 'src/tools' : Item(),
+ 'src/tools/ConsoleRunner' : Item(),
+ 'src/tools/ConsoleRunner/hi.txt' :
+ Item(contents="hihihihihihi")
+ })
+
+ expected_skip = wc.State('', { })
+
+ svntest.actions.run_and_verify_patch(wc_dir, os.path.abspath(patch_file_path),
+ expected_output,
+ expected_disk,
+ expected_status,
+ expected_skip,
+ None, # expected err
+ 1, # check-props
+ 1) # dry-run
+
########################################################################
#Run the tests
@@ -4143,6 +4198,7 @@ test_list = [ None,
patch_delete_and_skip,
patch_target_no_eol_at_eof,
patch_add_and_delete,
+ patch_git_with_index_line,
]
if __name__ == '__main__':
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/resolve_tests.py Sat Oct 6 03:59:33 2012
@@ -25,7 +25,7 @@
######################################################################
# General modules
-import shutil, sys, re, os
+import shutil, sys, re, os, stat
import time
# Our testing module
@@ -243,6 +243,35 @@ def prop_conflict_resolution(sbox):
[], # Prop deleted
['incoming-conflict\n'])
+@SkipUnless(svntest.main.is_posix_os)
+def auto_resolve_executable_file(sbox):
+ "resolve file with executable bit set"
+ sbox.build()
+ wc_dir = sbox.wc_dir
+
+ # Mark iota as executable
+ sbox.simple_propset("svn:executable", '*', 'iota')
+ sbox.simple_commit() # r2
+
+ # Make a change to iota in r3
+ svntest.main.file_write(sbox.ospath('iota'), "boo\n")
+ sbox.simple_commit() # r3
+
+ # Update back to r2, and tweak iota to provoke a text conflict
+ sbox.simple_update(revision=2)
+ svntest.main.file_write(sbox.ospath('iota'), "bzzt\n")
+
+ # Get permission bits of iota
+ mode = os.stat(sbox.ospath('iota'))[stat.ST_MODE]
+
+ # Update back to r3, and auto-resolve the text conflict.
+ svntest.main.run_svn(False, 'update', wc_dir, '--accept', 'theirs-full')
+
+ # permission bits of iota should be unaffected
+ if mode != os.stat(sbox.ospath('iota'))[stat.ST_MODE]:
+ raise svntest.Failure
+
+
########################################################################
# Run the tests
@@ -250,6 +279,7 @@ def prop_conflict_resolution(sbox):
test_list = [ None,
automatic_conflict_resolution,
prop_conflict_resolution,
+ auto_resolve_executable_file,
]
if __name__ == '__main__':
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/schedule_tests.py Sat Oct 6 03:59:33 2012
@@ -563,6 +563,7 @@ def status_add_deleted_directory(sbox):
# Regression test for issue #939:
# Recursive 'svn add' should still traverse already-versioned dirs.
@Issue(939)
+@Issue(4241)
def add_recursive_already_versioned(sbox):
"'svn add' should traverse already-versioned dirs"
@@ -592,8 +593,8 @@ def add_recursive_already_versioned(sbox
### or else Subversion will think you're trying to add the working copy
### to its parent directory, and will (possibly, if the parent directory
### isn't versioned) fail.
- #svntest.main.run_svn(None, 'add', '--force', wc_dir)
- #svntest.actions.run_and_verify_status(wc_dir, expected_status)
+ svntest.main.run_svn(None, 'add', '--force', wc_dir)
+ svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Now revert, and do the adds again from inside the working copy.
svntest.main.run_svn(None, 'revert', '--recursive', wc_dir)
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/stat_tests.py Sat Oct 6 03:59:33 2012
@@ -986,25 +986,19 @@ def status_ignored_dir(sbox):
#----------------------------------------------------------------------
-@Issue(2030)
-def status_unversioned_dir(sbox):
- "status on unversioned dir"
- sbox.build(read_only = True, create_wc = False)
- dir = sbox.wc_dir
- svntest.main.safe_rmtree(sbox.wc_dir)
- os.mkdir(dir)
-
- # Depending on whether you run the tests below a working copy
- # or not, the error message might either be something like
- # svn: warning: W155007: '...copies/stat_tests-19' is not a working copy
- # or
- # svn: warning: W155010: The node '...copies/stat_tests-19' was not found.
+def status_unversioned_dir_in_wc(sbox):
+ "status on unversioned dir in working copy"
+ sbox.build(read_only = True)
- expected_err = "svn: warning: W1550(07|10): .*'.*(/|\\\\)" + \
- os.path.basename(dir) + \
- "' (is not a working copy|was not found)"
+ # Create two unversioned directories within the test working copy
+ path = sbox.ospath('1/2')
+ os.makedirs(path)
+
+ expected_err = "svn: warning: (W155007|W155010): .*'.*(/|\\\\)" + \
+ os.path.basename(path) + \
+ "' was not found"
svntest.actions.run_and_verify_svn2(None, [], expected_err, 0,
- "status", dir, dir)
+ "status", path)
#----------------------------------------------------------------------
@@ -1883,14 +1877,6 @@ def status_nested_wc_old_format(sbox):
os.chdir(wc_dir)
svntest.actions.run_and_verify_svn(None, [ "? subdir\n" ], [], 'st')
-########################################################################
-# Run the tests
-
-
-def simple_lock(sbox, relpath):
- path = os.path.join(sbox.wc_dir, relpath)
- svntest.actions.run_and_verify_svn(None, None, [], 'lock', path)
-
#----------------------------------------------------------------------
# Regression test for issue #3855 "status doesn't show 'K' on a locked
# deleted node".
@@ -1902,7 +1888,8 @@ def status_locked_deleted(sbox):
iota_path = sbox.ospath('iota')
sbox.simple_rm('iota')
- simple_lock(sbox, 'iota')
+ svntest.actions.run_and_verify_svn(None, None, [], 'lock',
+ os.path.join(sbox.wc_dir, 'iota'))
svntest.actions.run_and_verify_svn(None, ['D K %s\n' % iota_path], [],
'status', iota_path)
@@ -2036,6 +2023,19 @@ def status_not_present(sbox):
sbox.ospath('A/mu'),
sbox.ospath('no-file'))
+# Skip this test is a .svn dir exists in the root directory
+@Skip(lambda: os.path.exists("/%s" % svntest.main.get_admin_name()))
+def status_unversioned_dir(sbox):
+ "status on unversioned dir"
+ sbox.build(read_only = True, create_wc = False)
+
+ # Run svn status on "/", which we assume exists and isn't a WC.
+ # This should work on UNIX-like systems and Windows systems
+ expected_err = "svn: warning: W1550(07|10): .*'.*(/|\\\\)" + \
+ "' is not a working copy"
+ svntest.actions.run_and_verify_svn2(None, [], expected_err, 0,
+ "status", "/")
+
########################################################################
# Run the tests
@@ -2060,7 +2060,7 @@ test_list = [ None,
missing_dir_in_anchor,
status_in_xml,
status_ignored_dir,
- status_unversioned_dir,
+ status_unversioned_dir_in_wc,
status_missing_dir,
status_nonrecursive_update_different_cwd,
status_add_plus_conflict,
@@ -2080,6 +2080,7 @@ test_list = [ None,
wclock_status,
modified_modulo_translation,
status_not_present,
+ status_unversioned_dir,
]
if __name__ == '__main__':
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svndumpfilter_tests.py Sat Oct 6 03:59:33 2012
@@ -679,6 +679,33 @@ def accepts_deltas(sbox):
+@Issue(4234)
+def dumpfilter_targets_expect_leading_slash_prefixes(sbox):
+ "dumpfilter targets expect leading '/' in prefixes"
+ ## See http://subversion.tigris.org/issues/show_bug.cgi?id=4234. ##
+
+ test_create(sbox)
+
+ dumpfile_location = os.path.join(os.path.dirname(sys.argv[0]),
+ 'svndumpfilter_tests_data',
+ 'greek_tree.dump')
+ dumpfile = open(dumpfile_location).read()
+
+ (fd, targets_file) = tempfile.mkstemp(dir=svntest.main.temp_dir)
+ try:
+ targets = open(targets_file, 'w')
+
+ # Removing the leading slash in path prefixes should work.
+ targets.write('A/D/H\n')
+ targets.write('A/D/G\n')
+ targets.close()
+ _simple_dumpfilter_test(sbox, dumpfile,
+ 'exclude', '/A/B/E', '--targets', targets_file)
+ finally:
+ os.close(fd)
+ os.remove(targets_file)
+
+
########################################################################
# Run the tests
@@ -693,6 +720,7 @@ test_list = [ None,
dropped_but_not_renumbered_empty_revs,
match_empty_prefix,
accepts_deltas,
+ dumpfilter_targets_expect_leading_slash_prefixes,
]
if __name__ == '__main__':
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svnlook_tests.py Sat Oct 6 03:59:33 2012
@@ -698,9 +698,14 @@ fp.close()"""
'bogus_rev_val\n',
' bogus_prop\n',
' svn:log\n', ' svn:author\n',
- # internal property, not really expected
- ' svn:check-locks\n',
- ' bogus_rev_prop\n', ' svn:date\n']
+ ' svn:check-locks\n', # internal prop, not really expected
+ ' bogus_rev_prop\n',
+ ' svn:date\n',
+ ' svn:txn:client-compat-version\n',
+ ]
+ # ra_dav and ra_svn add the user-agent ephemeral property
+ if svntest.main.is_ra_type_dav() or svntest.main.is_ra_type_svn():
+ expected_data.append(' svn:txn:user-agent\n')
verify_logfile(logfilepath, svntest.verify.UnorderedOutput(expected_data))
def property_delete(sbox):
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/svntest/actions.py Sat Oct 6 03:59:33 2012
@@ -1266,9 +1266,9 @@ def run_and_verify_mergeinfo(error_re_st
expected_output = [],
*args):
"""Run 'svn mergeinfo ARGS', and compare the result against
- EXPECTED_OUTPUT, which is either a list of string representations
- of revisions expected in the output, or a plain string.
- Raise an exception if an unexpected output is encountered."""
+ EXPECTED_OUTPUT, a list of string representations of revisions
+ expected in the output. Raise an exception if an unexpected
+ output is encountered."""
mergeinfo_command = ["mergeinfo"]
mergeinfo_command.extend(args)
@@ -1281,36 +1281,23 @@ def run_and_verify_mergeinfo(error_re_st
verify.verify_outputs(None, None, err, None, expected_err)
return
- if isinstance(expected_output, list):
- out = [_f for _f in [x.rstrip()[1:] for x in out] if _f]
- expected_output.sort()
- extra_out = []
- if out != expected_output:
- exp_hash = dict.fromkeys(expected_output)
- for rev in out:
- if rev in exp_hash:
- del(exp_hash[rev])
- else:
- extra_out.append(rev)
- extra_exp = list(exp_hash.keys())
- raise Exception("Unexpected 'svn mergeinfo' output:\n"
- " expected but not found: %s\n"
- " found but not expected: %s"
- % (', '.join([str(x) for x in extra_exp]),
- ', '.join([str(x) for x in extra_out])))
- elif isinstance(expected_output, str):
- out = "".join(out)
- if out != expected_output:
- raise Exception("Unexpected 'svn mergeinfo' output:\n"
- " expected:\n%s\n"
- " found:\n%s\n"
- " diff:\n%s\n"
- % (expected_output, out,
- '\n'.join(difflib.unified_diff(
- expected_output.splitlines(),
- out.splitlines()))))
- else:
- raise Exception("expected_output has unexpected type")
+ out = [_f for _f in [x.rstrip()[1:] for x in out] if _f]
+ expected_output.sort()
+ extra_out = []
+ if out != expected_output:
+ exp_hash = dict.fromkeys(expected_output)
+ for rev in out:
+ if rev in exp_hash:
+ del(exp_hash[rev])
+ else:
+ extra_out.append(rev)
+ extra_exp = list(exp_hash.keys())
+ raise Exception("Unexpected 'svn mergeinfo' output:\n"
+ " expected but not found: %s\n"
+ " found but not expected: %s"
+ % (', '.join([str(x) for x in extra_exp]),
+ ', '.join([str(x) for x in extra_out])))
+
def run_and_verify_switch(wc_dir_name,
wc_target,
Modified: subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py (original)
+++ subversion/branches/inheritable-props/subversion/tests/cmdline/tree_conflict_tests.py Sat Oct 6 03:59:33 2012
@@ -652,7 +652,7 @@ def merge_file_mod_onto_not_file(sbox):
"merge file: modify onto not-file"
sbox2 = sbox.clone_dependent()
test_tc_merge(sbox, f_mods, br_scen = f_dels + f_moves + f_rpl_d)
- test_tc_merge(sbox2, f_mods, wc_scen = f_dels)
+ test_tc_merge(sbox2, f_mods, wc_scen = f_dels + f_moves)
# Note: See UC4 in notes/tree-conflicts/use-cases.txt.
def merge_file_del_onto_not_same(sbox):
Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_fs/fs-test.c Sat Oct 6 03:59:33 2012
@@ -4176,12 +4176,12 @@ check_related(const svn_test_opts_t *opt
int related = 0;
/* Get the ID for the first path/revision combination. */
- SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr1.rev, pool));
- SVN_ERR(svn_fs_node_id(&id1, rev_root, pr1.path, pool));
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr1.rev, subpool));
+ SVN_ERR(svn_fs_node_id(&id1, rev_root, pr1.path, subpool));
/* Get the ID for the second path/revision combination. */
- SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr2.rev, pool));
- SVN_ERR(svn_fs_node_id(&id2, rev_root, pr2.path, pool));
+ SVN_ERR(svn_fs_revision_root(&rev_root, fs, pr2.rev, subpool));
+ SVN_ERR(svn_fs_node_id(&id2, rev_root, pr2.path, subpool));
/* <exciting> Now, run the relationship check! </exciting> */
related = svn_fs_check_related(id1, id2) ? 1 : 0;
Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_repos/repos-test.c Sat Oct 6 03:59:33 2012
@@ -1077,9 +1077,10 @@ rmlocks(const svn_test_opts_t *opts,
SVN_ERR(create_rmlocks_editor(&editor, &edit_baton, &removed, subpool));
/* Report what we have. */
- SVN_ERR(svn_repos_begin_report2(&report_baton, 1, repos, "/", "", NULL,
+ SVN_ERR(svn_repos_begin_report3(&report_baton, 1, repos, "/", "", NULL,
FALSE, svn_depth_infinity, FALSE, FALSE,
- editor, edit_baton, NULL, NULL, subpool));
+ editor, edit_baton, NULL, NULL, 1024,
+ subpool));
SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
svn_depth_infinity,
FALSE, NULL, subpool));
@@ -2065,9 +2066,10 @@ reporter_depth_exclude(const svn_test_op
SVN_ERR(dir_delta_get_editor(&editor, &edit_baton, fs,
txn_root, "", subpool));
- SVN_ERR(svn_repos_begin_report2(&report_baton, 2, repos, "/", "", NULL,
+ SVN_ERR(svn_repos_begin_report3(&report_baton, 2, repos, "/", "", NULL,
TRUE, svn_depth_infinity, FALSE, FALSE,
- editor, edit_baton, NULL, NULL, subpool));
+ editor, edit_baton, NULL, NULL, 16,
+ subpool));
SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
svn_depth_infinity,
FALSE, NULL, subpool));
@@ -2122,9 +2124,10 @@ reporter_depth_exclude(const svn_test_op
SVN_ERR(dir_delta_get_editor(&editor, &edit_baton, fs,
txn_root, "", subpool));
- SVN_ERR(svn_repos_begin_report2(&report_baton, 2, repos, "/", "", NULL,
+ SVN_ERR(svn_repos_begin_report3(&report_baton, 2, repos, "/", "", NULL,
TRUE, svn_depth_infinity, FALSE, FALSE,
- editor, edit_baton, NULL, NULL, subpool));
+ editor, edit_baton, NULL, NULL, 20,
+ subpool));
SVN_ERR(svn_repos_set_path3(report_baton, "", 1,
svn_depth_infinity,
FALSE, NULL, subpool));
Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_subr/cache-test.c Sat Oct 6 03:59:33 2012
@@ -183,8 +183,8 @@ test_membuffer_cache_basic(apr_pool_t *p
svn_cache__t *cache;
svn_membuffer_t *membuffer;
- SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1,
- TRUE, pool));
+ SVN_ERR(svn_cache__membuffer_cache_create(&membuffer, 10*1024, 1, 0,
+ TRUE, TRUE, pool));
/* Create a cache with just one entry. */
SVN_ERR(svn_cache__create_membuffer_cache(&cache,
Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_subr/checksum-test.c Sat Oct 6 03:59:33 2012
@@ -24,6 +24,7 @@
#include <apr_pools.h>
#include "svn_error.h"
+#include "private/svn_pseudo_md5.h"
#include "../svn_test.h"
@@ -80,6 +81,38 @@ test_checksum_empty(apr_pool_t *pool)
return SVN_NO_ERROR;
}
+static svn_error_t *
+test_pseudo_md5(apr_pool_t *pool)
+{
+ apr_uint32_t input[16] = { 0 };
+ apr_uint32_t digest_15[4] = { 0 };
+ apr_uint32_t digest_31[4] = { 0 };
+ apr_uint32_t digest_63[4] = { 0 };
+ svn_checksum_t *checksum;
+
+ /* input is all 0s but the hash shall be different
+ (due to different input sizes)*/
+ svn__pseudo_md5_15(digest_15, input);
+ svn__pseudo_md5_31(digest_31, input);
+ svn__pseudo_md5_63(digest_63, input);
+
+ SVN_TEST_ASSERT(memcmp(digest_15, digest_31, sizeof(digest_15)));
+ SVN_TEST_ASSERT(memcmp(digest_15, digest_63, sizeof(digest_15)));
+ SVN_TEST_ASSERT(memcmp(digest_31, digest_63, sizeof(digest_15)));
+
+ /* the checksums shall also be different from "proper" MD5 */
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 15, pool));
+ SVN_TEST_ASSERT(memcmp(digest_15, checksum->digest, sizeof(digest_15)));
+
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 31, pool));
+ SVN_TEST_ASSERT(memcmp(digest_31, checksum->digest, sizeof(digest_15)));
+
+ SVN_ERR(svn_checksum(&checksum, svn_checksum_md5, input, 63, pool));
+ SVN_TEST_ASSERT(memcmp(digest_63, checksum->digest, sizeof(digest_15)));
+
+ return SVN_NO_ERROR;
+}
+
/* An array of all test functions */
struct svn_test_descriptor_t test_funcs[] =
{
@@ -88,5 +121,7 @@ struct svn_test_descriptor_t test_funcs[
"checksum parse"),
SVN_TEST_PASS2(test_checksum_empty,
"checksum emptiness"),
+ SVN_TEST_PASS2(test_pseudo_md5,
+ "pseudo-md5 compatibility"),
SVN_TEST_NULL
};
Modified: subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c (original)
+++ subversion/branches/inheritable-props/subversion/tests/libsvn_wc/op-depth-test.c Sat Oct 6 03:59:33 2012
@@ -4926,9 +4926,9 @@ mixed_rev_move(const svn_test_opts_t *op
{1, "A/B/C", "base-deleted", NO_COPY_FROM},
{1, "X", "normal", 1, "A", MOVED_HERE},
{1, "X/B", "not-present", 2, "A/B"},
- {2, "X/B", "normal", 2, "A/B", MOVED_HERE},
+ {2, "X/B", "normal", 2, "A/B"},
{2, "X/B/C", "not-present", 3, "A/B/C"},
- {3, "X/B/C", "normal", 3, "A/B/C", MOVED_HERE},
+ {3, "X/B/C", "normal", 3, "A/B/C"},
{0}
};
SVN_ERR(check_db_rows(&b, "", nodes));
Modified: subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd (original)
+++ subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-bindings.cmd Sat Oct 6 03:59:33 2012
@@ -32,7 +32,7 @@ IF ERRORLEVEL 1 (
PATH %PATH%;%TESTDIR%\bin
SET result=0
-python win-tests.py -r -f fsfs --javahl "%TESTDIR%\tests"
+python win-tests.py -d -f fsfs --javahl "%TESTDIR%\tests"
IF ERRORLEVEL 1 (
echo [python reported error %ERRORLEVEL%]
SET result=1
Modified: subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd (original)
+++ subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build-bindings.cmd Sat Oct 6 03:59:33 2012
@@ -29,5 +29,8 @@ IF ERRORLEVEL 1 (
EXIT /B 0
)
-msbuild subversion_vcnet.sln /p:Configuration=Release /p:Platform=win32 /t:__JAVAHL__ /t:__SWIG_PYTHON__ /t:__SWIG_PERL__ /t:__JAVAHL_TESTS__
+msbuild subversion_vcnet.sln /p:Configuration=Debug /p:Platform=win32 /t:__JAVAHL__ /t:__JAVAHL_TESTS__
+IF ERRORLEVEL 1 EXIT /B 1
+
+msbuild subversion_vcnet.sln /p:Configuration=Release /p:Platform=win32 /t:__SWIG_PYTHON__ /t:__SWIG_PERL__
IF ERRORLEVEL 1 EXIT /B 1
Modified: subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd (original)
+++ subversion/branches/inheritable-props/tools/buildbot/slaves/win32-SharpSvn/svntest-build.cmd Sat Oct 6 03:59:33 2012
@@ -25,7 +25,7 @@ IF ERRORLEVEL 1 EXIT /B 1
PUSHD ..\deps
-nant gen-dev -D:wc=..\build -D:impBase=../deps/build/win32 %NANTARGS%
+nant gen-dev -D:wc=..\build -D:impBase=../deps/build/win32 -D:botBuild=true %NANTARGS%
IF ERRORLEVEL 1 EXIT /B 1
POPD
Propchange: subversion/branches/inheritable-props/tools/client-side/svn-bench/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Sat Oct 6 03:59:33 2012
@@ -0,0 +1,3 @@
+svn-bench
+svn.1
+.libs
Modified: subversion/branches/inheritable-props/tools/dist/backport.pl
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/dist/backport.pl?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/dist/backport.pl (original)
+++ subversion/branches/inheritable-props/tools/dist/backport.pl Sat Oct 6 03:59:33 2012
@@ -126,9 +126,9 @@ EOF
reinteg_rev=\`$SVN info $STATUS | sed -ne 's/Last Changed Rev: //p'\`
if $WET_RUN; then
# Sleep to avoid out-of-order commit notifications
- if [ -n "$YES" ]; then sleep 15; fi
+ if [ -n "\$YES" ]; then sleep 15; fi
$SVNq rm $BRANCHES/$entry{branch} -m "Remove the '$entry{branch}' branch, reintegrated in r\$reinteg_rev."
- if [ -n "$YES" ]; then sleep 1; fi
+ if [ -n "\$YES" ]; then sleep 1; fi
else
echo "Removing reintegrated '$entry{branch}' branch"
fi
@@ -229,6 +229,10 @@ sub main {
usage, exit 0 if @ARGV;
usage, exit 1 unless -r $STATUS;
+ # Because we use the ':normal' command in Vim...
+ die "A vim with the +ex_extra feature is required"
+ if `${VIM} --version` !~ /[+]ex_extra/;
+
@ARGV = $STATUS;
# Skip most of the file
Propchange: subversion/branches/inheritable-props/tools/dist/make-deps-tarball.sh
------------------------------------------------------------------------------
Merged /subversion/branches/10Gb/tools/dist/make-deps-tarball.sh:r1388394,1388636,1388639,1388644,1388654,1388720,1388789,1388795,1388801,1388805,1388810,1388816,1389044,1389276,1389289,1389662,1389867,1390017,1390216,1390407
Merged /subversion/trunk/tools/dist/make-deps-tarball.sh:r1383998-1394910
Modified: subversion/branches/inheritable-props/tools/dist/nightly.sh
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/dist/nightly.sh?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/dist/nightly.sh (original)
+++ subversion/branches/inheritable-props/tools/dist/nightly.sh Sat Oct 6 03:59:33 2012
@@ -55,10 +55,10 @@ head=`$svn info $repo/trunk | grep '^Rev
# Get the latest versions of the rolling scripts
for i in release.py dist.sh
do
- $svn export -r $head $repo/trunk/tools/dist/$i@$head $dir/$i
+ $svn export --force -r $head $repo/trunk/tools/dist/$i@$head $dir/$i
done
# We also need ezt
-$svn export -r $head $repo/trunk/build/generator/ezt.py@$head $dir/ezt.py
+$svn export --force -r $head $repo/trunk/build/generator/ezt.py@$head $dir/ezt.py
# Create the environment
cd roll
Modified: subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c (original)
+++ subversion/branches/inheritable-props/tools/server-side/fsfs-reorg.c Sat Oct 6 03:59:33 2012
@@ -61,23 +61,23 @@ enum fragment_kind_t
typedef struct fragment_t
{
- apr_off_t position;
+ apr_int64_t position;
void *data;
enum fragment_kind_t kind;
} fragment_t;
typedef struct revision_location_t
{
- apr_off_t offset;
- apr_off_t changes;
- apr_off_t changes_len;
- apr_off_t end;
+ apr_int64_t offset;
+ apr_int64_t changes;
+ apr_int64_t changes_len;
+ apr_int64_t end;
} revision_location_t;
typedef struct location_t
{
- apr_off_t offset;
- apr_off_t size;
+ apr_int64_t offset;
+ apr_int64_t size;
} location_t;
typedef struct direntry_t
@@ -98,7 +98,7 @@ typedef struct representation_t
{
location_t original;
location_t target;
- apr_off_t header_size;
+ apr_int64_t header_size;
struct representation_t *delta_base;
revision_info_t *revision;
directory_t *dir;
@@ -153,7 +153,7 @@ typedef struct content_cache_t
typedef struct dir_cache_entry_t
{
svn_revnum_t revision;
- apr_off_t offset;
+ apr_int64_t offset;
apr_hash_t *hash;
} dir_cache_entry_t;
@@ -171,7 +171,7 @@ typedef struct dir_cache_t
typedef struct window_cache_entry_t
{
svn_revnum_t revision;
- apr_off_t offset;
+ apr_int64_t offset;
svn_stringbuf_t *window;
} window_cache_entry_t;
@@ -320,6 +320,7 @@ get_content(svn_string_t **data,
apr_file_t *file;
revision_info_t *revision_info;
svn_stringbuf_t *temp;
+ apr_off_t temp_offset;
svn_string_t *result = get_cached_content(fs->cache, revision);
if (result)
@@ -340,8 +341,11 @@ get_content(svn_string_t **data,
scratch_pool);
temp->len = revision_info->original.end - revision_info->original.offset;
SVN_ERR(open_rev_or_pack_file(&file, fs, revision, scratch_pool));
- SVN_ERR(svn_io_file_seek(file, APR_SET, &revision_info->original.offset,
+
+ temp_offset = (apr_off_t)revision_info->original.offset;
+ SVN_ERR(svn_io_file_seek(file, APR_SET, &temp_offset,
scratch_pool));
+ revision_info->original.offset = temp_offset;
SVN_ERR(svn_io_file_read(file, temp->data, &temp->len, scratch_pool));
set_cached_content(fs->cache, revision,
@@ -369,7 +373,7 @@ create_dir_cache(apr_pool_t *pool,
static apr_size_t
get_dir_cache_index(fs_fs_t *fs,
svn_revnum_t revision,
- apr_off_t offset)
+ apr_int64_t offset)
{
return (revision + offset * 0xd1f3da69) % fs->dir_cache->entry_count;
}
@@ -385,7 +389,7 @@ get_cached_dir(fs_fs_t *fs,
representation_t *representation)
{
svn_revnum_t revision = representation->revision->revision;
- apr_off_t offset = representation->original.offset;
+ apr_int64_t offset = representation->original.offset;
apr_size_t i = get_dir_cache_index(fs, revision, offset);
dir_cache_entry_t *entry = &fs->dir_cache->entries[i];
@@ -401,7 +405,7 @@ set_cached_dir(fs_fs_t *fs,
apr_hash_t *hash)
{
svn_revnum_t revision = representation->revision->revision;
- apr_off_t offset = representation->original.offset;
+ apr_int64_t offset = representation->original.offset;
apr_size_t i = get_dir_cache_index(fs, revision, offset);
dir_cache_entry_t *entry = &fs->dir_cache->entries[i];
@@ -446,7 +450,7 @@ create_window_cache(apr_pool_t *pool,
static apr_size_t
get_window_cache_index(fs_fs_t *fs,
svn_revnum_t revision,
- apr_off_t offset)
+ apr_int64_t offset)
{
return (revision + offset * 0xd1f3da69) % fs->window_cache->entry_count;
}
@@ -457,7 +461,7 @@ get_cached_window(fs_fs_t *fs,
apr_pool_t *pool)
{
svn_revnum_t revision = representation->revision->revision;
- apr_off_t offset = representation->original.offset;
+ apr_int64_t offset = representation->original.offset;
apr_size_t i = get_window_cache_index(fs, revision, offset);
window_cache_entry_t *entry = &fs->window_cache->entries[i];
@@ -473,7 +477,7 @@ set_cached_window(fs_fs_t *fs,
svn_stringbuf_t *window)
{
svn_revnum_t revision = representation->revision->revision;
- apr_off_t offset = representation->original.offset;
+ apr_int64_t offset = representation->original.offset;
apr_size_t i = get_window_cache_index(fs, revision, offset);
window_cache_entry_t *entry = &fs->window_cache->entries[i];
@@ -512,7 +516,7 @@ read_manifest(apr_array_header_t **manif
/* While we're here, let's just read the entire manifest file into an array,
so we can cache the entire thing. */
iterpool = svn_pool_create(pool);
- *manifest = apr_array_make(pool, fs->max_files_per_dir, sizeof(apr_off_t));
+ *manifest = apr_array_make(pool, fs->max_files_per_dir, sizeof(apr_int64_t));
while (1)
{
svn_stringbuf_t *sb;
@@ -530,7 +534,7 @@ read_manifest(apr_array_header_t **manif
return svn_error_createf(SVN_ERR_FS_CORRUPT, err,
_("Manifest offset '%s' too large"),
sb->data);
- APR_ARRAY_PUSH(*manifest, apr_off_t) = (apr_off_t)val;
+ APR_ARRAY_PUSH(*manifest, apr_int64_t) = (apr_int64_t)val;
}
svn_pool_destroy(iterpool);
@@ -538,12 +542,12 @@ read_manifest(apr_array_header_t **manif
}
static svn_error_t *
-read_revision_header(apr_off_t *changes,
- apr_off_t *changes_len,
- apr_off_t *root_noderev,
+read_revision_header(apr_int64_t *changes,
+ apr_int64_t *changes_len,
+ apr_int64_t *root_noderev,
svn_stringbuf_t *file_content,
- apr_off_t start,
- apr_off_t end,
+ apr_int64_t start,
+ apr_int64_t end,
apr_pool_t *pool)
{
char buf[64];
@@ -580,9 +584,9 @@ read_revision_header(apr_off_t *changes,
*(char *)space = 0;
SVN_ERR(svn_cstring_atoi64(&val, line+1));
- *root_noderev = (apr_off_t)val;
+ *root_noderev = (apr_int64_t)val;
SVN_ERR(svn_cstring_atoi64(&val, space+1));
- *changes = (apr_off_t)val;
+ *changes = (apr_int64_t)val;
*changes_len = end - *changes - start - (buf + len - line) + 1;
return SVN_NO_ERROR;
@@ -719,12 +723,12 @@ static int
compare_noderev_offsets(const void *data, const void *key)
{
return (*(const noderev_t **)data)->original.offset
- - *(const apr_off_t *)key;
+ - *(const apr_int64_t *)key;
}
static svn_error_t *
parse_revnode_pos(revision_info_t **revision_info,
- apr_off_t *offset,
+ apr_int64_t *offset,
fs_fs_t *fs,
svn_string_t *id)
{
@@ -756,7 +760,7 @@ parse_revnode_pos(revision_info_t **revi
static svn_error_t *
find_noderev(noderev_t **result,
revision_info_t *revision_info,
- apr_off_t offset)
+ apr_int64_t offset)
{
int idx = svn_sort__bsearch_lower_bound(&offset,
revision_info->node_revs,
@@ -780,7 +784,7 @@ parse_pred(noderev_t **result,
fs_fs_t *fs,
svn_string_t *id)
{
- apr_off_t offset;
+ apr_int64_t offset;
revision_info_t *revision_info;
SVN_ERR(parse_revnode_pos(&revision_info, &offset, fs, id));
@@ -793,7 +797,7 @@ static int
compare_representation_offsets(const void *data, const void *key)
{
return (*(const representation_t **)data)->original.offset
- - *(const apr_off_t *)key;
+ - *(const apr_int64_t *)key;
}
static representation_t *
@@ -801,7 +805,7 @@ find_representation(int *idx,
fs_fs_t *fs,
revision_info_t **revision_info,
int revision,
- apr_off_t offset)
+ apr_int64_t offset)
{
revision_info_t *info;
*idx = -1;
@@ -835,11 +839,11 @@ find_representation(int *idx,
static svn_error_t *
read_rep_base(representation_t **representation,
- apr_off_t *header_size,
+ apr_int64_t *header_size,
svn_boolean_t *is_plain,
fs_fs_t *fs,
svn_stringbuf_t *file_content,
- apr_off_t offset,
+ apr_int64_t offset,
apr_pool_t *pool,
apr_pool_t *scratch_pool)
{
@@ -892,7 +896,7 @@ parse_representation(representation_t **
representation_t *result;
int revision;
- apr_off_t offset;
+ apr_int64_t offset;
svn_filesize_t size;
int idx;
@@ -932,7 +936,7 @@ read_windows(apr_array_header_t **window
svn_string_t *content;
svn_string_t data;
svn_stream_t *stream;
- apr_off_t offset = representation->original.offset
+ apr_int64_t offset = representation->original.offset
+ representation->header_size;
char version;
apr_size_t len = sizeof(version);
@@ -973,7 +977,7 @@ read_plain(svn_stringbuf_t **content,
apr_pool_t *pool)
{
svn_string_t *data;
- apr_off_t offset = representation->original.offset
+ apr_int64_t offset = representation->original.offset
+ representation->header_size;
SVN_ERR(get_content(&data, fs, representation->revision->revision, pool));
@@ -1047,7 +1051,7 @@ static svn_error_t *
read_noderev(noderev_t **noderev,
fs_fs_t *fs,
svn_stringbuf_t *file_content,
- apr_off_t offset,
+ apr_int64_t offset,
revision_info_t *revision_info,
apr_pool_t *pool,
apr_pool_t *scratch_pool);
@@ -1056,7 +1060,7 @@ static svn_error_t *
get_noderev(noderev_t **noderev,
fs_fs_t *fs,
svn_stringbuf_t *file_content,
- apr_off_t offset,
+ apr_int64_t offset,
revision_info_t *revision_info,
apr_pool_t *pool,
apr_pool_t *scratch_pool)
@@ -1147,7 +1151,7 @@ parse_dir(fs_fs_t *fs,
{
const char *name = svn__apr_hash_index_key(hi);
svn_string_t *str_val = svn__apr_hash_index_val(hi);
- apr_off_t offset;
+ apr_int64_t offset;
revision_info_t *revision_info;
apr_size_t name_len = strlen(name);
direntry_t *entry = base_dir
@@ -1185,7 +1189,7 @@ static svn_error_t *
read_noderev(noderev_t **noderev,
fs_fs_t *fs,
svn_stringbuf_t *file_content,
- apr_off_t offset,
+ apr_int64_t offset,
revision_info_t *revision_info,
apr_pool_t *pool,
apr_pool_t *scratch_pool)
@@ -1293,7 +1297,7 @@ read_pack_file(fs_fs_t *fs,
for (i = 0; i < manifest->nelts; ++i)
{
- apr_off_t root_node_offset;
+ apr_int64_t root_node_offset;
svn_string_t rev_content;
revision_info_t *info = apr_pcalloc(pool, sizeof(*info));
@@ -1301,15 +1305,15 @@ read_pack_file(fs_fs_t *fs,
info->representations = apr_array_make(iter_pool, 4, sizeof(representation_t*));
info->revision = base + i;
- info->original.offset = APR_ARRAY_IDX(manifest, i, apr_off_t);
+ info->original.offset = APR_ARRAY_IDX(manifest, i, apr_int64_t);
info->original.end = i+1 < manifest->nelts
- ? APR_ARRAY_IDX(manifest, i+1 , apr_off_t)
+ ? APR_ARRAY_IDX(manifest, i+1 , apr_int64_t)
: file_content->len;
SVN_ERR(read_revision_header(&info->original.changes,
&info->original.changes_len,
&root_node_offset,
file_content,
- APR_ARRAY_IDX(manifest, i , apr_off_t),
+ APR_ARRAY_IDX(manifest, i , apr_int64_t),
info->original.end,
iter_pool));
@@ -1340,7 +1344,7 @@ read_revision_file(fs_fs_t *fs,
svn_revnum_t revision,
apr_pool_t *pool)
{
- apr_off_t root_node_offset;
+ apr_int64_t root_node_offset;
apr_pool_t *local_pool = svn_pool_create(pool);
svn_stringbuf_t *file_content;
svn_string_t rev_content;
@@ -1995,7 +1999,8 @@ write_revisions(fs_fs_t *fs,
for (i = 0; i < pack->info->nelts; ++i)
{
revision_info_t *info = APR_ARRAY_IDX(pack->info, i, revision_info_t*);
- svn_stream_printf(stream, itempool, "%ld\n", info->target.offset);
+ svn_stream_printf(stream, itempool, "%" APR_UINT64_T_FMT "\n",
+ info->target.offset);
svn_pool_clear(itempool);
}
}
@@ -2175,7 +2180,8 @@ update_text(svn_stringbuf_t *node_rev,
char *newline_pos = strchr(val_pos, '\n');
svn_checksum_t checksum = {representation->dir->target_md5,
svn_checksum_md5};
- const char* temp = apr_psprintf(scratch_pool, "%ld %ld %ld %ld %s",
+ const char* temp = apr_psprintf(scratch_pool, "%ld %" APR_UINT64_T_FMT " %"
+ APR_UINT64_T_FMT" %" APR_SIZE_T_FMT " %s",
representation->revision->revision,
representation->target.offset - representation->revision->target.offset,
representation->target.size,
@@ -2194,7 +2200,7 @@ update_text(svn_stringbuf_t *node_rev,
val_pos = end_pos + 1;
end_pos = strchr(strchr(val_pos, ' ') + 1, ' ');
- temp = apr_psprintf(scratch_pool, "%ld %ld",
+ temp = apr_psprintf(scratch_pool, "%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT,
representation->target.offset - representation->revision->target.offset,
representation->target.size);
@@ -2223,7 +2229,7 @@ get_fragment_content(svn_string_t **cont
case header_fragment:
info = fragment->data;
*content = svn_string_createf(pool,
- "\n%ld %ld\n",
+ "\n%" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
info->root_noderev->target.offset - info->target.offset,
info->target.changes);
return SVN_NO_ERROR;
@@ -2260,7 +2266,7 @@ get_fragment_content(svn_string_t **cont
header = svn_stringbuf_create("DELTA\n", pool);
else
header = svn_stringbuf_createf(pool,
- "DELTA %ld %ld %ld\n",
+ "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
representation->delta_base->revision->revision,
representation->delta_base->target.offset
- representation->delta_base->revision->target.offset,
@@ -2303,7 +2309,7 @@ get_fragment_content(svn_string_t **cont
{
representation_t *base_rep = representation->delta_base;
header = svn_stringbuf_createf(pool,
- "DELTA %ld %ld %ld\n",
+ "DELTA %ld %" APR_UINT64_T_FMT " %" APR_UINT64_T_FMT "\n",
base_rep->revision->revision,
base_rep->target.offset - base_rep->revision->target.offset,
base_rep->target.size);
Modified: subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py (original)
+++ subversion/branches/inheritable-props/tools/server-side/svnpubsub/commit-hook.py Sat Oct 6 03:59:33 2012
@@ -46,7 +46,7 @@ def svncmd_info(repo, revision):
#print data
return {'author': data[0],
'date': data[1],
- 'log': "".join(data[3:])}
+ 'log': "\n".join(data[3:])}
def svncmd_dirs(repo, revision):
cmd = "%s dirs-changed -r %s %s" % (SVNLOOK, revision, repo)
@@ -68,6 +68,7 @@ def do_put(body):
def main(repo, revision):
+ revision = revision.lstrip('r')
i = svncmd_info(repo, revision)
data = {'revision': int(revision),
'dirs_changed': [],
Modified: subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py (original)
+++ subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/client.py Sat Oct 6 03:59:33 2012
@@ -137,13 +137,13 @@ class XMLStreamHandler(xml.sax.handler.C
elif self.chars and self.rev:
value = self.chars.strip()
if name == 'path':
- self.rev.dirs_changed.append(value)
+ self.rev.dirs_changed.append(value.decode('unicode_escape'))
elif name == 'author':
- self.rev.author = value
+ self.rev.author = value.decode('unicode_escape')
elif name == 'date':
- self.rev.date = value
+ self.rev.date = value.decode('unicode_escape')
elif name == 'log':
- self.rev.log = value
+ self.rev.log = value.decode('unicode_escape')
# Toss out any accumulated characters for this element.
self.chars = ''
Modified: subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py
URL: http://svn.apache.org/viewvc/subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py?rev=1394915&r1=1394914&r2=1394915&view=diff
==============================================================================
--- subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py (original)
+++ subversion/branches/inheritable-props/tools/server-side/svnpubsub/svnpubsub/server.py Sat Oct 6 03:59:33 2012
@@ -73,12 +73,15 @@ import time
class Revision:
def __init__(self, r):
+ # Don't escape the values; json handles binary values fine.
+ # ET will happily emit literal control characters (eg, NUL),
+ # thus creating invalid XML, so the XML code paths do escaping.
self.rev = r.get('revision')
self.repos = r.get('repos')
- self.dirs_changed = [x.encode('unicode_escape') for x in r.get('dirs_changed')]
- self.author = r.get('author').encode('unicode_escape')
- self.log = r.get('log').encode('unicode_escape')
- self.date = r.get('date').encode('unicode_escape')
+ self.dirs_changed = [x for x in r.get('dirs_changed')]
+ self.author = r.get('author')
+ self.log = r.get('log')
+ self.date = r.get('date')
def render_commit(self, format):
if format == "json":
@@ -90,13 +93,13 @@ class Revision:
'date': self.date}}) +","
elif format == "xml":
c = ET.Element('commit', {'repository': self.repos, 'revision': "%d" % (self.rev)})
- ET.SubElement(c, 'author').text = self.author
- ET.SubElement(c, 'date').text = self.date
- ET.SubElement(c, 'log').text = self.log
+ ET.SubElement(c, 'author').text = self.author.encode('unicode_escape')
+ ET.SubElement(c, 'date').text = self.date.encode('unicode_escape')
+ ET.SubElement(c, 'log').text = self.log.encode('unicode_escape')
d = ET.SubElement(c, 'dirs_changed')
for p in self.dirs_changed:
x = ET.SubElement(d, 'path')
- x.text = p
+ x.text = p.encode('unicode_escape')
str = ET.tostring(c, 'UTF-8') + "\n"
return str[39:]
else:
@@ -112,7 +115,7 @@ class Revision:
d = ET.SubElement(c, 'dirs_changed')
for p in self.dirs_changed:
x = ET.SubElement(d, 'path')
- x.text = p
+ x.text = p.encode('unicode_escape')
str = ET.tostring(c, 'UTF-8') + "\n"
return str[39:]
else: