Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/davautocheck.sh URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/davautocheck.sh?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/davautocheck.sh (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/davautocheck.sh Mon Apr 16 12:21:02 2018 @@ -52,6 +52,7 @@ # Run this script with the test suite name and test number to execute just this # test: # subversion/tests/cmdline/davautocheck.sh basic 4 +# This script can also be invoked via "make davautocheck". # # If the temporary directory is not deleted, it can be reused for further # manual DAV protocol interoperation testing. HTTPD must be started by @@ -65,18 +66,19 @@ # APXS=/opt/svn/1.4.x/bin/apxs MODULE_PATH=/opt/svn/1.4.x/modules \ # subversion/tests/cmdline/davautocheck.sh # -# To prevent the server from advertising httpv2, pass USE_HTTPV1 in -# the environment. +# Other environment variables that are interpreted by this script: # -# To enable "SVNCacheRevProps on" set CACHE_REVPROPS in the environment. +# make davautocheck CACHE_REVPROPS=1 # sets SVNCacheRevProps on # -# To test over https set USE_SSL in the environment. +# make davautocheck BLOCK_READ=1 # sets SVNBlockRead on # -# To use value for "SVNPathAuthz" directive set SVN_PATH_AUTHZ with -# appropriate value in the environment. +# make davautocheck USE_SSL=1 # run over https # -# To load an MPM module for Apache 2.4 use APACHE_MPM=event in the -# environment. +# make davautocheck USE_HTTPV1=1 # sets SVNAdvertiseV2Protocol off +# +# make davautocheck APACHE_MPM=event # specifies the 2.4 MPM +# +# make davautocheck SVN_PATH_AUTHZ=short_circuit # SVNPathAuthz short_circuit # # Passing --no-tests as argv[1] will have the script start a server # but not run any tests. Passing --gdb or --lldb will do the same, and in @@ -222,6 +224,11 @@ if [ ${CACHE_REVPROPS:+set} ]; then CACHE_REVPROPS_SETTING=on fi +BLOCK_READ_SETTING=off +if [ ${BLOCK_READ:+set} ]; then + BLOCK_READ_SETTING=on +fi + if [ ${MODULE_PATH:+set} ]; then MOD_DAV_SVN="$MODULE_PATH/mod_dav_svn.so" MOD_AUTHZ_SVN="$MODULE_PATH/mod_authz_svn.so" @@ -274,6 +281,9 @@ say "Using '$HTPASSWD'..." LOAD_MOD_DAV=$(get_loadmodule_config mod_dav) \ || fail "DAV module not found" +LOAD_MOD_DAV_FS=$(get_loadmodule_config mod_dav_fs) \ + || fail "Filesystem DAV module not found" + LOAD_MOD_LOG_CONFIG=$(get_loadmodule_config mod_log_config) \ || fail "log_config module not found" @@ -440,6 +450,7 @@ $LOAD_MOD_MIME $LOAD_MOD_ALIAS $LOAD_MOD_UNIXD $LOAD_MOD_DAV +$LOAD_MOD_DAV_FS LoadModule dav_svn_module "$MOD_DAV_SVN" $LOAD_MOD_AUTH $LOAD_MOD_AUTHN_CORE @@ -475,6 +486,13 @@ mkdir "$HTTPD_LOCK" \ __EOF__ fi +HTTPD_DAV="$HTTPD_ROOT/dav" +mkdir "$HTTPD_DAV" \ + || fail "couldn't create DAV lock directory '$HTTPD_DAV'" +cat >> "$HTTPD_CFG" <<__EOF__ +DavLockDB "$HTTPD_DAV/lock.db" +__EOF__ + if [ ${USE_SSL:+set} ]; then cat >> "$HTTPD_CFG" <<__EOF__ SSLEngine on @@ -518,40 +536,51 @@ CustomLog "$HTTPD_ROOT/ops" "% #Require all granted </Directory> +Alias /nodavroot $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/nodavroot +<Directory $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/nodavroot> +</Directory> + +Alias /fsdavroot $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/fsdavroot +<Directory $ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/fsdavroot> + DAV filesystem +</Directory> + <Location /svn-test-work/repositories> +__EOF__ +location_common() { +cat >> "$HTTPD_CFG" <<__EOF__ DAV svn - SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/repositories" AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" AuthType Basic AuthName "Subversion Repository" AuthUserFile $HTTPD_USERS - Require valid-user SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} SVNCacheRevProps ${CACHE_REVPROPS_SETTING} + SVNListParentPath On + SVNBlockRead ${BLOCK_READ_SETTING} +__EOF__ +} +location_common +cat >> "$HTTPD_CFG" <<__EOF__ + SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/repositories" + Require valid-user ${SVN_PATH_AUTHZ_LINE} </Location> <Location /ddt-test-work/repositories> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/repositories" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS Require valid-user - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} ${SVN_PATH_AUTHZ_LINE} DontDoThatConfigFile "$HTTPD_DONTDOTHAT" </Location> <Location /svn-test-work/local_tmp/repos> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp/repos" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS Require valid-user - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} ${SVN_PATH_AUTHZ_LINE} </Location> <Location /authz-test-work/anon> @@ -574,84 +603,54 @@ CustomLog "$HTTPD_ROOT/ops" "% ${SVN_PATH_AUTHZ_LINE} </Location> <Location /authz-test-work/mixed> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS Require valid-user Satisfy Any ${SVN_PATH_AUTHZ_LINE} </Location> <Location /authz-test-work/mixed-noauthwhenanon> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS Require valid-user AuthzSVNNoAuthWhenAnonymousAllowed On SVNPathAuthz On </Location> <Location /authz-test-work/authn> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS Require valid-user ${SVN_PATH_AUTHZ_LINE} </Location> <Location /authz-test-work/authn-anonoff> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS Require valid-user AuthzSVNAnonymous Off SVNPathAuthz On </Location> <Location /authz-test-work/authn-lcuser> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS Require valid-user AuthzForceUsernameCase Lower ${SVN_PATH_AUTHZ_LINE} </Location> <Location /authz-test-work/authn-group> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS AuthGroupFile $HTTPD_GROUPS Require group random AuthzSVNAuthoritative Off @@ -659,15 +658,10 @@ CustomLog "$HTTPD_ROOT/ops" "% </Location> <IfModule mod_authz_core.c> <Location /authz-test-work/sallrany> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS AuthzSendForbiddenOnFailure On Satisfy All <RequireAny> @@ -677,15 +671,10 @@ CustomLog "$HTTPD_ROOT/ops" "% ${SVN_PATH_AUTHZ_LINE} </Location> <Location /authz-test-work/sallrall> - DAV svn +__EOF__ +location_common +cat >> "$HTTPD_CFG" <<__EOF__ SVNParentPath "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/local_tmp" - AuthzSVNAccessFile "$ABS_BUILDDIR/subversion/tests/cmdline/svn-test-work/authz" - SVNAdvertiseV2Protocol ${ADVERTISE_V2_PROTOCOL} - SVNCacheRevProps ${CACHE_REVPROPS_SETTING} - SVNListParentPath On - AuthType Basic - AuthName "Subversion Repository" - AuthUserFile $HTTPD_USERS AuthzSendForbiddenOnFailure On Satisfy All <RequireAll>
Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn--help_stdout Mon Apr 16 12:21:02 2018 @@ -42,18 +42,19 @@ Available subcommands: resolve resolved revert - shelf-diff - shelf-drop - shelf-list (shelves) - shelf-log - shelf-save - shelve - unshelve status (stat, st) switch (sw) unlock update (up) upgrade + x-shelf-diff (shelf-diff) + x-shelf-drop (shelf-drop) + x-shelf-list (shelf-list, shelves) + x-shelf-list-by-paths (shelf-list-by-paths) + x-shelf-log (shelf-log) + x-shelf-save (shelf-save) + x-shelve (shelve) + x-unshelve (unshelve) Subversion is a tool for version control. For additional information, see http://subversion.apache.org/ Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/getopt_tests_data/svn_help_stdout Mon Apr 16 12:21:02 2018 @@ -42,18 +42,19 @@ Available subcommands: resolve resolved revert - shelf-diff - shelf-drop - shelf-list (shelves) - shelf-log - shelf-save - shelve - unshelve status (stat, st) switch (sw) unlock update (up) upgrade + x-shelf-diff (shelf-diff) + x-shelf-drop (shelf-drop) + x-shelf-list (shelf-list, shelves) + x-shelf-list-by-paths (shelf-list-by-paths) + x-shelf-log (shelf-log) + x-shelf-save (shelf-save) + x-shelve (shelve) + x-unshelve (unshelve) Subversion is a tool for version control. For additional information, see http://subversion.apache.org/ Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/iprop_authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/iprop_authz_tests.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/iprop_authz_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/iprop_authz_tests.py Mon Apr 16 12:21:02 2018 @@ -105,7 +105,7 @@ def iprops_authz(sbox): write_authz_file(sbox, { "/" : svntest.main.wc_author + "=rw", "/A/D/H/psi" : svntest.main.wc_author + "=",}) - if sbox.repo_url.startswith("http"): + if svntest.main.is_ra_type_dav(): expected_err = ".*[Ff]orbidden.*" else: expected_err = ".*svn: E170001: Authorization failed.*" Propchange: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/mod_dav_svn_tests.py ------------------------------------------------------------------------------ svn:executable = * Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/shelf_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/shelf_tests.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/shelf_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/shelf_tests.py Mon Apr 16 12:21:02 2018 @@ -44,22 +44,28 @@ Item = wc.StateItem #---------------------------------------------------------------------- -def shelve_unshelve_verify(sbox): +def state_from_status(wc_dir): + _, output, _ = svntest.main.run_svn(None, 'status', '-v', '-u', '-q', + wc_dir) + return svntest.wc.State.from_status(output, wc_dir) + +def shelve_unshelve_verify(sbox, modifier): """Round-trip: shelve; verify all changes are reverted; unshelve; verify all changes are restored. """ wc_dir = sbox.wc_dir + virginal_state = state_from_status(wc_dir) + + # Make some changes to the working copy + modifier(sbox) # Save the modified state - _, output, _ = svntest.main.run_svn(None, 'status', '-v', '-u', '-q', - wc_dir) - modified_state = svntest.wc.State.from_status(output, wc_dir) + modified_state = state_from_status(wc_dir) # Shelve; check there are no longer any modifications svntest.actions.run_and_verify_svn(None, [], 'shelve', 'foo') - virginal_state = svntest.actions.get_virginal_state(wc_dir, 1) svntest.actions.run_and_verify_status(wc_dir, virginal_state) # Unshelve; check the original modifications are here again @@ -74,15 +80,13 @@ def shelve_unshelve(sbox, modifier): shelve and unshelve; verify changes are fully reverted and restored. """ - sbox.build() + if not sbox.is_built(): + sbox.build() was_cwd = os.getcwd() os.chdir(sbox.wc_dir) sbox.wc_dir = '' - # Make some changes to the working copy - modifier(sbox) - - shelve_unshelve_verify(sbox) + shelve_unshelve_verify(sbox, modifier) os.chdir(was_cwd) @@ -116,10 +120,8 @@ def shelve_adds(sbox): "shelve adds" def modifier(sbox): - sbox.simple_append('A/new', 'A new file\n') - sbox.simple_add('A/new') - sbox.simple_append('A/new2', 'A new file\n') - sbox.simple_add('A/new2') + sbox.simple_add_text('A new file\n', 'A/new') + sbox.simple_add_text('A new file\n', 'A/new2') sbox.simple_propset('p', 'v', 'A/new2') shelve_unshelve(sbox, modifier) @@ -137,6 +139,36 @@ def shelve_deletes(sbox): #---------------------------------------------------------------------- +@XFail() +def shelve_empty_adds(sbox): + "shelve empty adds" + sbox.build(empty=True) + + def modifier(sbox): + sbox.simple_add_text('', 'empty') + sbox.simple_add_text('', 'empty-with-prop') + sbox.simple_propset('p', 'v', 'empty-with-prop') + + shelve_unshelve(sbox, modifier) + +#---------------------------------------------------------------------- + +@XFail() +def shelve_empty_deletes(sbox): + "shelve empty deletes" + sbox.build(empty=True) + sbox.simple_add_text('', 'empty') + sbox.simple_add_text('', 'empty-with-prop') + sbox.simple_propset('p', 'v', 'empty-with-prop') + sbox.simple_commit() + + def modifier(sbox): + sbox.simple_rm('empty', 'empty-with-prop') + + shelve_unshelve(sbox, modifier) + +#---------------------------------------------------------------------- + def shelve_from_inner_path(sbox): "shelve from inner path" @@ -148,18 +180,12 @@ def shelve_from_inner_path(sbox): os.chdir(sbox.ospath('A')) sbox.wc_dir = '..' - modifier(sbox) - shelve_unshelve_verify(sbox) + shelve_unshelve_verify(sbox, modifier) os.chdir(was_cwd) #---------------------------------------------------------------------- -def state_from_status(wc_dir): - _, output, _ = svntest.main.run_svn(None, 'status', '-v', '-u', '-q', - wc_dir) - return svntest.wc.State.from_status(output, wc_dir) - def save_revert_restore(sbox, modifier1, modifier2): "Save 2 checkpoints; revert; restore 1st" @@ -226,6 +252,92 @@ def shelve_mergeinfo(sbox): shelve_unshelve(sbox, modifier) +#---------------------------------------------------------------------- + +def unshelve_refuses_if_conflicts(sbox): + "unshelve refuses if conflicts" + + def modifier1(sbox): + sbox.simple_append('alpha', 'A-mod1\nB\nC\nD\n', truncate=True) + sbox.simple_append('beta', 'A-mod1\nB\nC\nD\n', truncate=True) + + def modifier2(sbox): + sbox.simple_append('beta', 'A-mod2\nB\nC\nD\n', truncate=True) + + sbox.build(empty=True) + was_cwd = os.getcwd() + os.chdir(sbox.wc_dir) + sbox.wc_dir = '' + wc_dir = '' + + sbox.simple_add_text('A\nB\nC\nD\n', 'alpha') + sbox.simple_add_text('A\nB\nC\nD\n', 'beta') + sbox.simple_commit() + initial_state = state_from_status(wc_dir) + + # Make initial mods; remember this modified state + modifier1(sbox) + modified_state1 = state_from_status(wc_dir) + assert modified_state1 != initial_state + + # Shelve; check there are no longer any local mods + svntest.actions.run_and_verify_svn(None, [], + 'shelve', 'foo') + svntest.actions.run_and_verify_status(wc_dir, initial_state) + + # Make a different local mod that will conflict with the shelf + modifier2(sbox) + modified_state2 = state_from_status(wc_dir) + + # Try to unshelve; check it fails with an error about a conflict + svntest.actions.run_and_verify_svn(None, '.*[Cc]onflict.*', + 'unshelve', 'foo') + # Check nothing changed in the attempt + svntest.actions.run_and_verify_status(wc_dir, modified_state2) + +#---------------------------------------------------------------------- + +@XFail() +def shelve_binary_file_mod(sbox): + "shelve binary file mod" + + sbox.build(empty=True) + sbox.simple_add_text('\0\1\2\3\4\5', 'bin') + sbox.simple_commit() + sbox.simple_update() + + def modifier(sbox): + sbox.simple_append('bin', '\5\4\3\2\1\0', truncate=True) + + shelve_unshelve(sbox, modifier) + +#---------------------------------------------------------------------- + +@XFail() +def shelve_binary_file_add(sbox): + "shelve binary file add" + + def modifier(sbox): + sbox.simple_add_text('\0\1\2\3\4\5', 'bin') + + shelve_unshelve(sbox, modifier) + +#---------------------------------------------------------------------- + +@XFail() +def shelve_binary_file_del(sbox): + "shelve binary file del" + + sbox.build(empty=True) + sbox.simple_add_text('\0\1\2\3\4\5', 'bin') + sbox.simple_commit() + sbox.simple_update() + + def modifier(sbox): + sbox.simple_rm('bin') + + shelve_unshelve(sbox, modifier) + ######################################################################## # Run the tests @@ -236,9 +348,15 @@ test_list = [ None, shelve_prop_changes, shelve_adds, shelve_deletes, + shelve_empty_adds, + shelve_empty_deletes, shelve_from_inner_path, checkpoint_basic, shelve_mergeinfo, + unshelve_refuses_if_conflicts, + shelve_binary_file_mod, + shelve_binary_file_add, + shelve_binary_file_del, ] if __name__ == '__main__': Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnadmin_tests.py Mon Apr 16 12:21:02 2018 @@ -777,9 +777,13 @@ def verify_windows_paths_in_repos(sbox): def fsfs_file(repo_dir, kind, rev): if svntest.main.options.server_minor_version >= 5: if svntest.main.options.fsfs_sharding is None: + if svntest.main.is_fs_type_fsx(): + rev = 'r' + rev return os.path.join(repo_dir, 'db', kind, '0', rev) else: shard = int(rev) // svntest.main.options.fsfs_sharding + if svntest.main.is_fs_type_fsx(): + rev = 'r' + rev path = os.path.join(repo_dir, 'db', kind, str(shard), rev) if svntest.main.options.fsfs_packing is None or kind == 'revprops': @@ -2856,10 +2860,7 @@ def verify_quickly(sbox): "verify quickly using metadata" sbox.build(create_wc = False) - if svntest.main.is_fs_type_fsfs(): - rev_file = open(fsfs_file(sbox.repo_dir, 'revs', '1'), 'r+b') - else: - rev_file = open(fsfs_file(sbox.repo_dir, 'revs', 'r1'), 'r+b') + rev_file = open(fsfs_file(sbox.repo_dir, 'revs', '1'), 'r+b') # set new contents rev_file.seek(8) @@ -3801,6 +3802,28 @@ def dump_invalid_filtering_option(sbox): '--include', '/A/B/E', sbox.repo_dir) +@Issue(4725) +def load_issue4725(sbox): + """load that triggers issue 4725""" + + sbox.build(empty=True) + + sbox.simple_mkdir('subversion') + sbox.simple_commit() + sbox.simple_mkdir('subversion/trunk') + sbox.simple_mkdir('subversion/branches') + sbox.simple_commit() + sbox.simple_mkdir('subversion/trunk/src') + sbox.simple_commit() + + _, dump, _ = svntest.actions.run_and_verify_svnadmin(None, [], + 'dump', '-q', + sbox.repo_dir) + + sbox2 = sbox.clone_dependent() + sbox2.build(create_wc=False, empty=True) + load_and_verify_dumpstream(sbox2, None, [], None, False, dump, '-M100') + ######################################################################## # Run the tests @@ -3873,7 +3896,8 @@ test_list = [ None, dump_exclude_by_pattern, dump_include_by_pattern, dump_exclude_all_rev_changes, - dump_invalid_filtering_option + dump_invalid_filtering_option, + load_issue4725, ] if __name__ == '__main__': Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnauthz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnauthz_tests.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnauthz_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnauthz_tests.py Mon Apr 16 12:21:02 2018 @@ -197,9 +197,8 @@ def svnauthz_validate_txn_test(sbox): svntest.main.create_python_hook_script(pre_commit_hook, hook_instance) svntest.main.file_append(authz_path, 'x') expected_status.tweak('A/authz', status=' ', wc_rev=4) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) expected_data = svntest.verify.ExpectedOutput("Exit 2\n", match_all=False) verify_logfile(logfilepath, expected_data) @@ -275,9 +274,8 @@ def svnauthz_accessof_repo_test(sbox): expected_status.add({ 'A/authz' : Item(status=' ', wc_rev=2), }) - if svntest.actions.run_and_verify_commit(wc_dir, expected_output, - expected_status): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, expected_output, + expected_status) # Anonymous access with no path, and no repository should be rw # since it returns the highest level of access granted anywhere. Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnserveautocheck.sh URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnserveautocheck.sh?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnserveautocheck.sh (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnserveautocheck.sh Mon Apr 16 12:21:02 2018 @@ -31,6 +31,14 @@ # distribution; it's easiest to just run it as "make svnserveautocheck". # Like "make check", you can specify further options like # "make svnserveautocheck FS_TYPE=bdb TESTS=subversion/tests/cmdline/basic.py". +# +# Other environment variables that can be passed: +# +# make svnserveautocheck CACHE_REVPROPS=1 # run svnserve --cache-revprops +# +# make svnserveautocheck BLOCK_READ=1 # run svnserve --block-read on +# +# make svnserveautocheck THREADED=1 # run svnserve -T PYTHON=${PYTHON:-python} @@ -124,6 +132,10 @@ if [ ${CACHE_REVPROPS:+set} ]; then SVNSERVE_ARGS="$SVNSERVE_ARGS --cache-revprops on" fi +if [ ${BLOCK_READ:+set} ]; then + SVNSERVE_ARGS="$SVNSERVE_ARGS --block-read on" +fi + "$SERVER_CMD" -d -r "$ABS_BUILDDIR/subversion/tests/cmdline" \ --listen-host 127.0.0.1 \ --listen-port $SVNSERVE_PORT \ Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnsync_authz_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnsync_authz_tests.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnsync_authz_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnsync_authz_tests.py Mon Apr 16 12:21:02 2018 @@ -415,7 +415,7 @@ def specific_deny_authz(sbox): # For mod_dav_svn's parent path setup we need per-repos permissions in # the authz file... - if sbox.repo_url.startswith('http'): + if svntest.main.is_ra_type_dav(): src_authz = sbox.authz_name() dst_authz = dest_sbox.authz_name() write_authz_file(sbox, None, Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/actions.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/actions.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/actions.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/actions.py Mon Apr 16 12:21:02 2018 @@ -74,6 +74,11 @@ def setup_pristine_greek_repository(): if not os.path.exists(main.general_repo_dir): os.makedirs(main.general_repo_dir) # this also creates all the intermediate dirs + if not os.path.exists(main.other_dav_root_dir): + os.makedirs(main.other_dav_root_dir) + if not os.path.exists(main.non_dav_root_dir): + os.makedirs(main.non_dav_root_dir) + # If there's no pristine repos, create one. if not os.path.exists(main.pristine_greek_repos_dir): if main.options.fsfs_version is not None: Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/main.py Mon Apr 16 12:21:02 2018 @@ -224,6 +224,10 @@ SVN_PROP_INHERITABLE_IGNORES = "svn:glob general_repo_dir = os.path.join(work_dir, "repositories") general_wc_dir = os.path.join(work_dir, "working_copies") +# Directories used for DAV tests +other_dav_root_dir = os.path.join(work_dir, "fsdavroot") +non_dav_root_dir = os.path.join(work_dir, "nodavroot") + # temp directory in which we will create our 'pristine' local # repository and other scratch data. This should be removed when we # quit and when we startup. @@ -1035,7 +1039,8 @@ def _post_create_repos(path, minor_versi users += (crosscheck_username + " = " + crosscheck_password + "\n") file_append(os.path.join(path, "conf", "passwd"), users) - if options.fs_type is None or options.fs_type == 'fsfs': + if options.fs_type is None or options.fs_type == 'fsfs' or \ + options.fs_type == 'fsx': # fsfs.conf file if (minor_version is None or minor_version >= 6): confpath = get_fsfs_conf_file_path(path) @@ -2335,6 +2340,8 @@ def execute_tests(test_list, serial_only global pristine_url global pristine_greek_repos_url + global other_dav_root_url + global non_dav_root_url global svn_binary global svnadmin_binary global svnlook_binary @@ -2414,6 +2421,10 @@ def execute_tests(test_list, serial_only pristine_greek_repos_dir.replace( os.path.sep, '/')) + other_dav_root_url = options.test_area_url + '/fsdavroot' + non_dav_root_url = options.test_area_url + '/nodavroot' + + if options.use_jsvn: if options.svn_bin is None: options.svn_bin = '' Propchange: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/mergetrees.py ('svn:executable' removed) Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svntest/verify.py Mon Apr 16 12:21:02 2018 @@ -256,6 +256,24 @@ class RegexListOutput(ExpectedOutput): def display_differences(self, message, label, actual): display_lines(message, self.expected, actual, label + ' (regexp)', label) + assert actual is not None + if not isinstance(actual, list): + actual = [actual] + + if self.match_all: + logger.warn('DIFF ' + label + ':') + if len(self.expected) != len(actual): + logger.warn('# Expected %d lines; actual %d lines' % + (len(self.expected), len(actual))) + for e, a in map(None, self.expected_res, actual): + if e is not None and a is not None and e.match(a): + logger.warn("| " + a.rstrip()) + else: + if e is not None: + logger.warn("| -" + e.pattern.rstrip()) + if a is not None: + logger.warn("| +" + a.rstrip()) + def insert(self, index, line): self.expected.insert(index, line) self.expected_res = [re.compile(e) for e in self.expected] @@ -305,6 +323,9 @@ class UnorderedRegexListOutput(ExpectedO assert actual is not None if not isinstance(actual, list): actual = [actual] + else: + # copy the list so we can remove elements without affecting caller + actual = actual[:] if len(self.expected) != len(actual): return False @@ -323,6 +344,27 @@ class UnorderedRegexListOutput(ExpectedO display_lines(message, self.expected, actual, label + ' (regexp) (unordered)', label) + assert actual is not None + if not isinstance(actual, list): + actual = [actual] + else: + # copy the list so we can remove elements without affecting caller + actual = actual[:] + + logger.warn('DIFF ' + label + ':') + if len(self.expected) != len(actual): + logger.warn('# Expected %d lines; actual %d lines' % + (len(self.expected), len(actual))) + for e in self.expected: + expect_re = re.compile(e) + for actual_line in actual: + if expect_re.match(actual_line): + actual.remove(actual_line) + break + else: + logger.warn("| -" + expect_re.pattern.rstrip()) + for a in actual: + logger.warn("| +" + a.rstrip()) class AlternateOutput(ExpectedOutput): """Matches any one of a list of ExpectedOutput instances. Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnversion_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnversion_tests.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnversion_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/svnversion_tests.py Mon Apr 16 12:21:02 2018 @@ -71,9 +71,8 @@ def svnversion_test(sbox): expected_output = wc.State(wc_dir, {'A/mu' : Item(verb='Sending')}) expected_status = svntest.actions.get_virginal_state(wc_dir, 1) expected_status.tweak('A/mu', wc_rev=2) - if svntest.actions.run_and_verify_commit(wc_dir, - expected_output, expected_status): - raise svntest.Failure + svntest.actions.run_and_verify_commit(wc_dir, + expected_output, expected_status) # Unmodified, mixed svntest.actions.run_and_verify_svnversion(wc_dir, repo_url, @@ -98,13 +97,12 @@ def svnversion_test(sbox): + 'appended mu text') expected_disk.tweak('iota', contents=expected_disk.desc['A/D/gamma'].contents) - if svntest.actions.run_and_verify_switch(wc_dir, iota_path, gamma_url, - expected_output, - expected_disk, - expected_status, - [], - False, '--ignore-ancestry'): - raise svntest.Failure + svntest.actions.run_and_verify_switch(wc_dir, iota_path, gamma_url, + expected_output, + expected_disk, + expected_status, + [], + False, '--ignore-ancestry') # Prop modified, mixed, part wc switched svntest.actions.run_and_verify_svnversion(wc_dir, repo_url, Modified: subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/cmdline/update_tests.py Mon Apr 16 12:21:02 2018 @@ -6719,6 +6719,7 @@ def update_conflict_details(sbox): # Keywords should be updated in local file even if text change is shortcut # (due to the local change being the same as the incoming change, for example). @XFail() +@Issue(4585) def update_keywords_on_shortcut(sbox): "update_keywords_on_shortcut" Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_client/conflicts-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_client/conflicts-test.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_client/conflicts-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_client/conflicts-test.c Mon Apr 16 12:21:02 2018 @@ -5093,6 +5093,9 @@ test_merge_incoming_move_dir_across_bran ctx, b->pool, b->pool)); SVN_ERR(svn_client_conflict_tree_get_details(conflict, ctx, b->pool)); + SVN_ERR_ASSERT(svn_client_conflict_get_local_change(conflict) == + svn_wc_conflict_reason_edited); + /* Check possible move destinations for the directory. */ SVN_ERR(svn_client_conflict_tree_get_resolution_options(&options, conflict, ctx, b->pool, Propchange: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_delta/ ------------------------------------------------------------------------------ --- svn:ignore (original) +++ svn:ignore Mon Apr 16 12:21:02 2018 @@ -8,6 +8,7 @@ vdelta-test random-test xml-output-test svndiff-test +svndiff-stream-test window-test editor-test combined Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/mergeinfo-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/mergeinfo-test.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/mergeinfo-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/mergeinfo-test.c Mon Apr 16 12:21:02 2018 @@ -1673,100 +1673,27 @@ test_remove_prefix_from_catalog(apr_pool static svn_error_t * test_rangelist_merge_overlap(apr_pool_t *pool) { - svn_rangelist_t * changes; - /* 15014-19472,19473-19612*,19613-19614,19615-19630*,19631-19634,19635-20055* */ - svn_rangelist_t * rangelist = apr_array_make(pool, 1, sizeof(svn_merge_range_t *)); - svn_merge_range_t *mrange = apr_pcalloc(pool, sizeof(*mrange)); - - /* This range is optional for reproducing issue #4686 */ - mrange->start = 15013; - mrange->end = 19472; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19472; - mrange->end = 19612; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* This range is optional for reproducing issue #4686 */ - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19612; - mrange->end = 19614; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19614; - mrange->end = 19630; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19630; - mrange->end = 19634; - mrange->inheritable = TRUE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* This range is optional for reproducing issue #4686 */ - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 19634; - mrange->end = 20055; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(rangelist, svn_merge_range_t *) = mrange; - - /* 15014-20515* */ - changes = apr_array_make(pool, 1, sizeof(svn_merge_range_t *)); - mrange = apr_pcalloc(pool, sizeof(*mrange)); - mrange->start = 15013; - mrange->end = 20515; - mrange->inheritable = FALSE; - APR_ARRAY_PUSH(changes, svn_merge_range_t *) = mrange; -#if 0 - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, rangelist, pool); - printf("rangelist %s\n", tmpString->data); - } - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, changes, pool); - printf("changes %s\n", tmpString->data); - } -#endif - + const char *rangelist_str = "19473-19612*,19615-19630*,19631-19634"; + const char *changes_str = "15014-20515*"; + const char *expected_str = "15014-19630*,19631-19634,19635-20515*"; + /* wrong result: "15014-19630*,19634-19631*,19631-19634,19635-20515*" */ + svn_rangelist_t *rangelist, *changes; + svn_string_t *result_string; + + /* prepare the inputs */ + SVN_ERR(svn_rangelist__parse(&rangelist, rangelist_str, pool)); + SVN_ERR(svn_rangelist__parse(&changes, changes_str, pool)); SVN_TEST_ASSERT(svn_rangelist__is_canonical(rangelist)); SVN_TEST_ASSERT(svn_rangelist__is_canonical(changes)); + /* perform the merge */ SVN_ERR(svn_rangelist_merge2(rangelist, changes, pool, pool)); + /* check the output */ SVN_TEST_ASSERT(svn_rangelist__is_canonical(rangelist)); + SVN_ERR(svn_rangelist_to_string(&result_string, rangelist, pool)); + SVN_TEST_STRING_ASSERT(result_string->data, expected_str); -#if 0 - { - svn_string_t * tmpString; - - svn_rangelist_to_string(&tmpString, rangelist, pool); - printf("result %s\n", tmpString->data); - } -#endif - - /* wrong result - result 15014-19472,19473-19612*,19613-19614,19615-19630*,19634-19631*,19631-19634,19635-20515* - */ - - { - svn_string_t * tmp_string; - svn_rangelist_t *range_list; - - SVN_ERR(svn_rangelist_to_string(&tmp_string, rangelist, pool)); - - SVN_ERR(svn_rangelist__parse(&range_list, tmp_string->data, pool)); - } - return SVN_NO_ERROR; } @@ -1900,9 +1827,9 @@ static struct svn_test_descriptor_t test "diff of rangelists"), SVN_TEST_PASS2(test_remove_prefix_from_catalog, "removal of prefix paths from catalog keys"), - SVN_TEST_XFAIL2(test_rangelist_merge_overlap, + SVN_TEST_PASS2(test_rangelist_merge_overlap, "merge of rangelists with overlaps (issue 4686)"), - SVN_TEST_XFAIL2(test_rangelist_loop, + SVN_TEST_PASS2(test_rangelist_loop, "test rangelist edgecases via loop"), SVN_TEST_NULL }; Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/utf-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/utf-test.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/utf-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/utf-test.c Mon Apr 16 12:21:02 2018 @@ -752,8 +752,10 @@ test_utf_conversions(apr_pool_t *pool) { svn_boolean_t sixteenbit; svn_boolean_t bigendian; + apr_size_t sourcelen; const char *source; const char *result; + svn_boolean_t counted; } tests[] = { #define UTF_32_LE FALSE, FALSE @@ -762,32 +764,36 @@ test_utf_conversions(apr_pool_t *pool) #define UTF_16_BE TRUE, TRUE /* Normal character conversion */ - { UTF_32_LE, "t\0\0\0" "e\0\0\0" "s\0\0\0" "t\0\0\0" "\0\0\0\0", "test" }, - { UTF_32_BE, "\0\0\0t" "\0\0\0e" "\0\0\0s" "\0\0\0t" "\0\0\0\0", "test" }, - { UTF_16_LE, "t\0" "e\0" "s\0" "t\0" "\0\0", "test" }, - { UTF_16_BE, "\0t" "\0e" "\0s" "\0t" "\0\0", "test" }, + { UTF_32_LE, 4, "t\0\0\0" "e\0\0\0" "s\0\0\0" "t\0\0\0" "\0\0\0\0", "test", FALSE }, + { UTF_32_BE, 4, "\0\0\0t" "\0\0\0e" "\0\0\0s" "\0\0\0t" "\0\0\0\0", "test", FALSE }, + { UTF_16_LE, 4, "t\0" "e\0" "s\0" "t\0" "\0\0", "test", FALSE }, + { UTF_16_BE, 4, "\0t" "\0e" "\0s" "\0t" "\0\0", "test", FALSE }, /* Valid surrogate pairs */ - { UTF_16_LE, "\x00\xD8" "\x00\xDC" "\0\0", "\xf0\x90\x80\x80" }, /* U+010000 */ - { UTF_16_LE, "\x34\xD8" "\x1E\xDD" "\0\0", "\xf0\x9d\x84\x9e" }, /* U+01D11E */ - { UTF_16_LE, "\xFF\xDB" "\xFD\xDF" "\0\0", "\xf4\x8f\xbf\xbd" }, /* U+10FFFD */ - - { UTF_16_BE, "\xD8\x00" "\xDC\x00" "\0\0", "\xf0\x90\x80\x80" }, /* U+010000 */ - { UTF_16_BE, "\xD8\x34" "\xDD\x1E" "\0\0", "\xf0\x9d\x84\x9e" }, /* U+01D11E */ - { UTF_16_BE, "\xDB\xFF" "\xDF\xFD" "\0\0", "\xf4\x8f\xbf\xbd" }, /* U+10FFFD */ + { UTF_16_LE, 2, "\x00\xD8" "\x00\xDC" "\0\0", "\xf0\x90\x80\x80", FALSE }, /* U+010000 */ + { UTF_16_LE, 2, "\x34\xD8" "\x1E\xDD" "\0\0", "\xf0\x9d\x84\x9e", FALSE }, /* U+01D11E */ + { UTF_16_LE, 2, "\xFF\xDB" "\xFD\xDF" "\0\0", "\xf4\x8f\xbf\xbd", FALSE }, /* U+10FFFD */ + + { UTF_16_BE, 2, "\xD8\x00" "\xDC\x00" "\0\0", "\xf0\x90\x80\x80", FALSE }, /* U+010000 */ + { UTF_16_BE, 2, "\xD8\x34" "\xDD\x1E" "\0\0", "\xf0\x9d\x84\x9e", FALSE }, /* U+01D11E */ + { UTF_16_BE, 2, "\xDB\xFF" "\xDF\xFD" "\0\0", "\xf4\x8f\xbf\xbd", FALSE }, /* U+10FFFD */ /* Swapped, single and trailing surrogate pairs */ - { UTF_16_LE, "*\0" "\x00\xDC" "\x00\xD8" "*\0\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*" }, - { UTF_16_LE, "*\0" "\x1E\xDD" "*\0\0\0", "*\xed\xb4\x9e*" }, - { UTF_16_LE, "*\0" "\xFF\xDB" "*\0\0\0", "*\xed\xaf\xbf*" }, - { UTF_16_LE, "\x1E\xDD" "\0\0", "\xed\xb4\x9e" }, - { UTF_16_LE, "\xFF\xDB" "\0\0", "\xed\xaf\xbf" }, - - { UTF_16_BE, "\0*" "\xDC\x00" "\xD8\x00" "\0*\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*" }, - { UTF_16_BE, "\0*" "\xDD\x1E" "\0*\0\0", "*\xed\xb4\x9e*" }, - { UTF_16_BE, "\0*" "\xDB\xFF" "\0*\0\0", "*\xed\xaf\xbf*" }, - { UTF_16_BE, "\xDD\x1E" "\0\0", "\xed\xb4\x9e" }, - { UTF_16_BE, "\xDB\xFF" "\0\0", "\xed\xaf\xbf" }, + { UTF_16_LE, 4, "*\0" "\x00\xDC" "\x00\xD8" "*\0\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*", FALSE }, + { UTF_16_LE, 3, "*\0" "\x1E\xDD" "*\0\0\0", "*\xed\xb4\x9e*", FALSE }, + { UTF_16_LE, 3, "*\0" "\xFF\xDB" "*\0\0\0", "*\xed\xaf\xbf*", FALSE }, + { UTF_16_LE, 1, "\x1E\xDD" "\0\0", "\xed\xb4\x9e", FALSE }, + { UTF_16_LE, 1, "\xFF\xDB" "\0\0", "\xed\xaf\xbf", FALSE }, + + { UTF_16_BE, 4, "\0*" "\xDC\x00" "\xD8\x00" "\0*\0\0", "*\xed\xb0\x80" "\xed\xa0\x80*", FALSE }, + { UTF_16_BE, 3, "\0*" "\xDD\x1E" "\0*\0\0", "*\xed\xb4\x9e*", FALSE }, + { UTF_16_BE, 3, "\0*" "\xDB\xFF" "\0*\0\0", "*\xed\xaf\xbf*", FALSE }, + { UTF_16_BE, 1, "\xDD\x1E" "\0\0", "\xed\xb4\x9e", FALSE }, + { UTF_16_BE, 1, "\xDB\xFF" "\0\0", "\xed\xaf\xbf", FALSE }, + + /* Counted strings with NUL characters */ + { UTF_16_LE, 3, "x\0" "\0\0" "y\0" "*\0", "x\0y", TRUE }, + { UTF_32_BE, 3, "\0\0\0x" "\0\0\0\0" "\0\0\0y" "\0\0\0*", "x\0y", TRUE }, #undef UTF_32_LE #undef UTF_32_BE @@ -799,33 +805,46 @@ test_utf_conversions(apr_pool_t *pool) const struct cvt_test_t *tc; const svn_string_t *result; - int i; + apr_size_t maxlen = 0; - for (i = 1, tc = tests; tc->source; ++tc, ++i) + /* To assure proper alignment of the source string, it needs to be copied + into an array of the appropriate type before calling + svn_utf__utf{16,32}_to_utf8. */ + apr_uint16_t *source16; + apr_int32_t *source32; + + for (tc = tests; tc->source; ++tc) + if (tc->sourcelen > maxlen) + maxlen = tc->sourcelen; + maxlen++; + + source16 = apr_pcalloc(pool, maxlen * sizeof(*source16)); + source32 = apr_pcalloc(pool, maxlen * sizeof(*source32)); + + for (tc = tests; tc->source; ++tc) { if (tc->sixteenbit) - SVN_ERR(svn_utf__utf16_to_utf8(&result, (const void*)tc->source, - SVN_UTF__UNKNOWN_LENGTH, - tc->bigendian, pool, pool)); + { + memset(source16, 0, maxlen * sizeof(*source16)); + memcpy(source16, tc->source, (tc->sourcelen + 1) * sizeof(*source16)); + SVN_ERR(svn_utf__utf16_to_utf8(&result, source16, + tc->counted ? tc->sourcelen : SVN_UTF__UNKNOWN_LENGTH, + tc->bigendian, pool, pool)); + } else - SVN_ERR(svn_utf__utf32_to_utf8(&result, (const void*)tc->source, - SVN_UTF__UNKNOWN_LENGTH, - tc->bigendian, pool, pool)); - SVN_ERR_ASSERT(0 == strcmp(result->data, tc->result)); + { + memset(source32, 0, maxlen * sizeof(*source32)); + memcpy(source32, tc->source, (tc->sourcelen + 1) * sizeof(*source32)); + SVN_ERR(svn_utf__utf32_to_utf8(&result, source32, + tc->counted ? tc->sourcelen : SVN_UTF__UNKNOWN_LENGTH, + tc->bigendian, pool, pool)); + } + if (tc->counted) + SVN_ERR_ASSERT(0 == memcmp(result->data, tc->result, tc->sourcelen)); + else + SVN_ERR_ASSERT(0 == strcmp(result->data, tc->result)); } - /* Test counted strings with NUL characters */ - SVN_ERR(svn_utf__utf16_to_utf8( - &result, (void*)("x\0" "\0\0" "y\0" "*\0"), 3, - FALSE, pool, pool)); - SVN_ERR_ASSERT(0 == memcmp(result->data, "x\0y", 3)); - - SVN_ERR(svn_utf__utf32_to_utf8( - &result, - (void*)("\0\0\0x" "\0\0\0\0" "\0\0\0y" "\0\0\0*"), 3, - TRUE, pool, pool)); - SVN_ERR_ASSERT(0 == memcmp(result->data, "x\0y", 3)); - return SVN_NO_ERROR; } Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/x509-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/x509-test.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/x509-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_subr/x509-test.c Mon Apr 16 12:21:02 2018 @@ -592,6 +592,32 @@ static struct x509_test cert_tests[] = { "good.example.com", "9693f17e59205f41ca2e14450d151b945651b2d7" }, + /* Signed using RSASSA-PSS algorithm with algorithm parameters */ + { + "MIICsjCCAWkCCQDHslXYA8hCxTA+BgkqhkiG9w0BAQowMaANMAsGCWCGSAFlAwQC" + "AaEaMBgGCSqGSIb3DQEBCDALBglghkgBZQMEAgGiBAICAN4wKjEUMBIGA1UECgwL" + "TXkgTG9jYWwgQ0ExEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0xODAyMDIxNjQ4MzVa" + "Fw0xODAyMDMxNjQ4MzVaMC4xGDAWBgNVBAoMD015IExvY2FsIFNlcnZlcjESMBAG" + "A1UEAwwJbG9jYWxob3N0MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCues61" + "JXXpLQI5yeg4aCLWRfvnJY7wnuU6FSA++3wwCJREx1/7ebnP9RRRqqKM+ZeeFMC+" + "UlJE3ft2tJTDOVk9j6qjvKrJUKM1YkIe0lARxs4RtZKDGfOdBhw/+iD+6fZzhL0n" + "+w+dIJGzl6ADWsE/x9yjDTkdgbtxHrx/76K0KQIDAQABMD4GCSqGSIb3DQEBCjAx" + "oA0wCwYJYIZIAWUDBAIBoRowGAYJKoZIhvcNAQEIMAsGCWCGSAFlAwQCAaIEAgIA" + "3gOCAQEABYRAijCSGyFdSuUYALUnNzPylqYXlW+dMKPywlUrFEhKnvS+FD9twerI" + "8kT4MDW6XvhScmL1MCDPNAkFY92UqaUrgT80oyrbpuakVrxFSS1i28xy8+kXAWYq" + "RNQVaME1NqnATYF0ZMD5xQK4rpa76gvWj3K8Lt++9EjjbkNiirIIMQEOxh1lwnDQ" + "81q1Rk6iujlnVDGHDQ+w8reE6fKfSWfv1EaQRcjNKCuzrW8WNN387G2byvwaaKeL" + "M7lV7wiV6PwrTNTZzVG3cWKDOEP1mGE7gyMu66siLECo8U95+ahK7O6vfeT3m3gv" + "7kzWNYozAQtBSC7b0WqWbVrzWI4HSg==", + "O=My Local Server, CN=localhost", + "2.5.4.10 2.5.4.3", + "O=My Local CA, CN=localhost", + "2.5.4.10 2.5.4.3", + "2018-02-02T16:48:35.000000Z ", + "2018-02-03T16:48:35.000000Z ", + "localhost", + "25ab5a059acfc793fc0d3734d426794a4ca7b631" + }, { NULL } }; Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/conflict-data-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/conflict-data-test.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/conflict-data-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/conflict-data-test.c Mon Apr 16 12:21:02 2018 @@ -594,6 +594,7 @@ test_serialize_tree_conflict(const svn_t svn_wc_conflict_reason_moved_away, svn_wc_conflict_action_delete, sbox_wc_path(&sbox, "A/B"), + sbox_wc_path(&sbox, "A/C"), pool, pool)); SVN_ERR(svn_wc__conflict_skel_set_op_switch( @@ -610,11 +611,13 @@ test_serialize_tree_conflict(const svn_t { svn_wc_conflict_reason_t reason; svn_wc_conflict_action_t action; - const char *moved_away_op_root_abspath; + const char *moved_away_src_op_root_abspath; + const char *moved_away_dst_op_root_abspath; SVN_ERR(svn_wc__conflict_read_tree_conflict(&reason, &action, - &moved_away_op_root_abspath, + &moved_away_src_op_root_abspath, + &moved_away_dst_op_root_abspath, sbox.wc_ctx->db, sbox.wc_abspath, conflict_skel, @@ -622,8 +625,10 @@ test_serialize_tree_conflict(const svn_t SVN_TEST_ASSERT(reason == svn_wc_conflict_reason_moved_away); SVN_TEST_ASSERT(action == svn_wc_conflict_action_delete); - SVN_TEST_STRING_ASSERT(moved_away_op_root_abspath, + SVN_TEST_STRING_ASSERT(moved_away_src_op_root_abspath, sbox_wc_path(&sbox, "A/B")); + SVN_TEST_STRING_ASSERT(moved_away_dst_op_root_abspath, + sbox_wc_path(&sbox, "A/C")); } return SVN_NO_ERROR; Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/op-depth-test.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/op-depth-test.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/op-depth-test.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/op-depth-test.c Mon Apr 16 12:21:02 2018 @@ -535,7 +535,7 @@ check_db_conflicts(svn_test__sandbox_t * SVN_ERR(svn_wc__conflict_read_tree_conflict(&info->tc.reason, &info->tc.action, &move_src_abspath, - b->wc_ctx->db, + NULL, b->wc_ctx->db, local_abspath, conflict, b->pool, iterpool)); Modified: subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/utils.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/utils.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/utils.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/libsvn_wc/utils.c Mon Apr 16 12:21:02 2018 @@ -417,11 +417,12 @@ sbox_wc_revert(svn_test__sandbox_t *b, c SVN_ERR(svn_wc__acquire_write_lock(&lock_root_abspath, b->wc_ctx, dir_abspath, FALSE /* lock_anchor */, b->pool, b->pool)); - SVN_ERR(svn_wc_revert5(b->wc_ctx, abspath, depth, + SVN_ERR(svn_wc_revert6(b->wc_ctx, abspath, depth, FALSE /* use_commit_times */, NULL /* changelist_filter */, FALSE /* clear_changelists */, FALSE /* metadata_only */, + TRUE /*added_keep_local*/, NULL, NULL, /* cancel baton + func */ NULL, NULL, /* notify baton + func */ b->pool)); Modified: subversion/branches/shelve-checkpoint/subversion/tests/svn_test_main.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/subversion/tests/svn_test_main.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/subversion/tests/svn_test_main.c (original) +++ subversion/branches/shelve-checkpoint/subversion/tests/svn_test_main.c Mon Apr 16 12:21:02 2018 @@ -903,9 +903,12 @@ svn_test_main(int argc, const char *argv apr_err = apr_getopt_long(os, cl_options, &opt_id, &opt_arg); if (APR_STATUS_IS_EOF(apr_err)) break; - else if (apr_err && (apr_err != APR_BADCH)) + else if (apr_err) { /* Ignore invalid option error to allow passing arbitrary options */ + if (apr_err == APR_BADCH) + continue; + fprintf(stderr, "apr_getopt_long failed : [%d] %s\n", apr_err, apr_strerror(apr_err, errmsg, sizeof(errmsg))); exit(1); Modified: subversion/branches/shelve-checkpoint/tools/buildbot/slaves/bb-openbsd/svnbuild.sh URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/buildbot/slaves/bb-openbsd/svnbuild.sh?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/buildbot/slaves/bb-openbsd/svnbuild.sh (original) +++ subversion/branches/shelve-checkpoint/tools/buildbot/slaves/bb-openbsd/svnbuild.sh Mon Apr 16 12:21:02 2018 @@ -25,4 +25,5 @@ set -x url="$(svn info --show-item url)" branch="${url##*/}" (test -h ../GNUmakefile || ln -s ../unix-build/Makefile.svn ../GNUmakefile) +touch ../objdir/svn-${branch}/.retrieved (cd .. && gmake BRANCH="$branch" THREADING="no" JAVA="no" MAKE_JOBS=8) Modified: subversion/branches/shelve-checkpoint/tools/client-side/bash_completion URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/bash_completion?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/bash_completion (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/bash_completion Mon Apr 16 12:21:02 2018 @@ -248,7 +248,7 @@ _svn() cmds="$cmds patch propdel pdel propedit pedit propget pget proplist" cmds="$cmds plist propset pset relocate resolve resolved revert status" cmds="$cmds switch unlock update upgrade" - cmds="$cmds shelf-diff shelf-drop shelf-list shelf-log shelf-save" + cmds="$cmds shelf-list-by-paths shelf-diff shelf-drop shelf-list shelf-log shelf-save" cmds="$cmds shelve shelves unshelve" # help options have a strange command status... @@ -1024,6 +1024,9 @@ _svn() upgrade) cmdOpts="$qOpts $pOpts" ;; + shelf-list-by-paths) + cmdOpts="$pOpts" + ;; shelf-diff) cmdOpts="$pOpts" ;; @@ -1049,7 +1052,7 @@ _svn() $qOpts $pOpts" ;; unshelve) - cmdOpts="--dry-run \ + cmdOpts="--drop --dry-run \ $qOpts $pOpts" ;; *) Modified: subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/help-cmd.c Mon Apr 16 12:21:02 2018 @@ -163,7 +163,7 @@ svn_min__help(apr_getopt_t *os, pool)), pool); #endif -#ifdef SVN_HAVE_GNOME_KEYRING +#if (defined(SVN_HAVE_GNOME_KEYRING) || defined(SVN_HAVE_LIBSECRET)) svn_stringbuf_appendcstr(version_footer, "* Gnome Keyring\n"); #endif #ifdef SVN_HAVE_GPG_AGENT @@ -176,7 +176,7 @@ svn_min__help(apr_getopt_t *os, svn_stringbuf_appendcstr(version_footer, "* KWallet (KDE)\n"); #endif - return svn_opt_print_help4(os, + return svn_opt_print_help5(os, "svn-mergeinfo-normalizer", opt_state ? opt_state->version : FALSE, opt_state ? opt_state->quiet : FALSE, Modified: subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/mergeinfo-normalizer.h Mon Apr 16 12:21:02 2018 @@ -117,7 +117,7 @@ svn_opt_subcommand_t svn_min__remove_branches; /* See definition in svn.c for documentation. */ -extern const svn_opt_subcommand_desc2_t svn_min__cmd_table[]; +extern const svn_opt_subcommand_desc3_t svn_min__cmd_table[]; /* See definition in svn.c for documentation. */ extern const int svn_min__global_options[]; Modified: subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/svn-mergeinfo-normalizer.c Mon Apr 16 12:21:02 2018 @@ -221,43 +221,44 @@ const int svn_min__global_options[] = opt_config_dir, opt_config_options, 0 }; -const svn_opt_subcommand_desc2_t svn_min__cmd_table[] = +const svn_opt_subcommand_desc3_t svn_min__cmd_table[] = { - { "help", svn_min__help, {"?", "h"}, N_ - ("Describe the usage of this program or its subcommands.\n" - "usage: help [SUBCOMMAND...]\n"), + { "help", svn_min__help, {"?", "h"}, {N_( + "Describe the usage of this program or its subcommands.\n" + "usage: help [SUBCOMMAND...]\n" + )}, {0} }, /* This command is also invoked if we see option "--help", "-h" or "-?". */ - { "analyze", svn_min__analyze, { "analyse" }, N_ - ("Generate a report of which part of the sub-tree mergeinfo can be\n" + { "analyze", svn_min__analyze, { "analyse" }, {N_( + "Generate a report of which part of the sub-tree mergeinfo can be\n" "removed and which part can't.\n" "usage: analyze [WCPATH...]\n" - "\n" + "\n"), N_( " If neither --remove-obsoletes, --remove-redundant nor --combine-ranges\n" " option is given, all three will be used implicitly.\n" - "\n" + "\n"), N_( " In verbose mode, the command will behave just like 'normalize --dry-run'\n" " but will show an additional summary of all deleted branches that were\n" " encountered plus the revision of their latest deletion (if available).\n" - "\n" + "\n"), N_( " In non-verbose mode, the per-node output does not give the parent path,\n" " no successful elisions and branch removals nor the list of remaining\n" " branches.\n" - ), + )}, {opt_targets, opt_depth, 'v', opt_remove_obsoletes, opt_remove_redundant, opt_remove_redundant_misaligned, opt_combine_ranges} }, - { "normalize", svn_min__normalize, { 0 }, N_ - ("Normalize / reduce the mergeinfo throughout the working copy sub-tree.\n" + { "normalize", svn_min__normalize, { 0 }, {N_( + "Normalize / reduce the mergeinfo throughout the working copy sub-tree.\n" "usage: normalize [WCPATH...]\n" - "\n" + "\n"), N_( " If neither --remove-obsoletes, --remove-redundant, --combine-ranges\n" " nor --remove-redundant-misaligned option is given, --remove-redundant\n" " will be used implicitly.\n" - "\n" + "\n"), N_( " In non-verbose mode, only general progress as well as a summary before\n" " and after the normalization process will be shown. Note that sub-node\n" " mergeinfo which could be removed entirely does not contribute to the\n" @@ -265,12 +266,12 @@ const svn_opt_subcommand_desc2_t svn_min " ranges combined only refers to the mergeinfo lines still present after\n" " the normalization process. To get total numbers, compare the initial\n" " with the final mergeinfo statistics.\n" - "\n" + "\n"), N_( " The detailed operation log in verbose mode replaces the progress display.\n" " For each node with mergeinfo, the nearest parent node with mergeinfo is\n" " given - if there is one and the result of trying to remove the mergeinfo\n" " is shown for each branch. The various outputs are:\n" - "\n" + "\n"), N_( " elide redundant branch - Revision ranges are the same as in the parent.\n" " Mergeinfo for this branch can be elided.\n" " elide branch - Not an exact match with the parent but the\n" @@ -324,32 +325,34 @@ const svn_opt_subcommand_desc2_t svn_min " The sub-tree mergeinfo cannot be elided.\n" " REVERSE RANGE(S) found - The mergeinfo contains illegal reverse ranges.\n" " The sub-tree mergeinfo cannot be elided.\n" - "\n" + "\n"), N_( " If all branches have been removed from a nodes' mergeinfo, the whole\n" " svn:mergeinfo property will be removed. Otherwise, only obsolete\n" " branches will be removed. In verbose mode, a list of branches that\n" - " could not be removed will be shown per node.\n"), + " could not be removed will be shown per node.\n" + )}, {opt_targets, opt_depth, opt_dry_run, 'q', 'v', opt_remove_obsoletes, opt_remove_redundant, opt_remove_redundant_misaligned, opt_combine_ranges} }, - { "remove-branches", svn_min__remove_branches, { 0 }, N_ - ("Read a list of branch names from the given file and remove all\n" + { "remove-branches", svn_min__remove_branches, { 0 }, {N_( + "Read a list of branch names from the given file and remove all\n" "mergeinfo referring to these branches from the given targets.\n" "usage: remove-branches [WCPATH...] --file FILE\n" - "\n" + "\n"), N_( " The command will behave just like 'normalize --remove-obsoletes' but\n" " will never actually contact the repository. Instead, it assumes any\n" " path given in FILE is a deleted branch.\n" - "\n" + "\n"), N_( " Compared to a simple 'normalize --remove-obsoletes' run, this command\n" " allows for selective removal of obsolete branches. It may therefore be\n" " better suited for large deployments with complex branch structures.\n" " You may also use this to remove mergeinfo that refers to still existing\n" - " branches.\n"), + " branches.\n" + )}, {opt_targets, opt_depth, opt_dry_run, 'q', 'v', 'F'} }, - { NULL, NULL, {0}, NULL, {0} } + { NULL, NULL, {0}, {NULL}, {0} } }; @@ -414,7 +417,7 @@ sub_main(int *exit_code, int argc, const svn_client_ctx_t *ctx; apr_array_header_t *received_opts; int i; - const svn_opt_subcommand_desc2_t *subcommand = NULL; + const svn_opt_subcommand_desc3_t *subcommand = NULL; svn_min__cmd_baton_t command_baton = { 0 }; svn_auth_baton_t *ab; svn_config_t *cfg_config; @@ -639,7 +642,7 @@ sub_main(int *exit_code, int argc, const just typos/mistakes. Whatever the case, the subcommand to actually run is svn_cl__help(). */ if (opt_state.help) - subcommand = svn_opt_get_canonical_subcommand2(svn_min__cmd_table, "help"); + subcommand = svn_opt_get_canonical_subcommand3(svn_min__cmd_table, "help"); /* If we're not running the `help' subcommand, then look for a subcommand in the first argument. */ @@ -650,8 +653,8 @@ sub_main(int *exit_code, int argc, const if (opt_state.version) { /* Use the "help" subcommand to handle the "--version" option. */ - static const svn_opt_subcommand_desc2_t pseudo_cmd = - { "--version", svn_min__help, {0}, "", + static const svn_opt_subcommand_desc3_t pseudo_cmd = + { "--version", svn_min__help, {0}, {""}, {opt_version, /* must accept its own option */ 'q', /* brief output */ 'v', /* verbose output */ @@ -676,7 +679,7 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&first_arg, os->argv[os->ind++], pool)); - subcommand = svn_opt_get_canonical_subcommand2(svn_min__cmd_table, + subcommand = svn_opt_get_canonical_subcommand3(svn_min__cmd_table, first_arg); if (subcommand == NULL) { @@ -704,12 +707,12 @@ sub_main(int *exit_code, int argc, const if (opt_id == 'h' || opt_id == '?') continue; - if (! svn_opt_subcommand_takes_option3(subcommand, opt_id, + if (! svn_opt_subcommand_takes_option4(subcommand, opt_id, svn_min__global_options)) { const char *optstr; const apr_getopt_option_t *badopt = - svn_opt_get_option_from_code2(opt_id, svn_min__options, + svn_opt_get_option_from_code3(opt_id, svn_min__options, subcommand, pool); svn_opt_format_option(&optstr, badopt, FALSE, pool); if (subcommand->name[0] == '-') Modified: subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/svn-mergeinfo-normalizer/wc_mergeinfo.c Mon Apr 16 12:21:02 2018 @@ -112,8 +112,8 @@ static int compare_mergeinfo(const void *lhs, const void *rhs) { - const mergeinfo_t *lhs_mi = *(const mergeinfo_t **)lhs; - const mergeinfo_t *rhs_mi = *(const mergeinfo_t **)rhs; + const mergeinfo_t *lhs_mi = *(const mergeinfo_t *const *)lhs; + const mergeinfo_t *rhs_mi = *(const mergeinfo_t *const *)rhs; return strcmp(lhs_mi->local_path, rhs_mi->local_path); } Modified: subversion/branches/shelve-checkpoint/tools/client-side/svn-viewspec.py URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/svn-viewspec.py?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/svn-viewspec.py (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/svn-viewspec.py Mon Apr 16 12:21:02 2018 @@ -121,6 +121,8 @@ DEPTH_FILES = 'files' DEPTH_IMMEDIATES = 'immediates' DEPTH_INFINITY = 'infinity' +os_system = None +args = None class TreeNode: """A representation of a single node in a Subversion sparse @@ -159,8 +161,8 @@ def svn_path_compare_paths(path1, path2) NOTE: Stolen unapologetically from Subversion's Python bindings module svn.core.""" - path1_len = len(path1); - path2_len = len(path2); + path1_len = len(path1) + path2_len = len(path2) min_len = min(path1_len, path2_len) i = 0 @@ -280,10 +282,10 @@ def checkout_tree(base_url, revision, tr if revision != -1: revision_str = "--revision=%d " % (revision) if is_top: - os.system('svn checkout "%s" "%s" --depth=%s %s' + os_system('svn checkout "%s" "%s" --depth=%s %s' % (base_url, target_dir, depth, revision_str)) else: - os.system('svn update "%s" --set-depth=%s %s' + os_system('svn update "%s" --set-depth=%s %s' % (target_dir, depth, revision_str)) child_names = tree_node.children.keys() child_names.sort(svn_path_compare_paths) @@ -304,27 +306,34 @@ def checkout_spec(viewspec, target_dir): def usage_and_exit(errmsg=None): stream = errmsg and sys.stderr or sys.stdout - msg = __doc__.replace("__SCRIPTNAME__", os.path.basename(sys.argv[0])) + msg = __doc__.replace("__SCRIPTNAME__", os.path.basename(args[0])) stream.write(msg) if errmsg: stream.write("ERROR: %s\n" % (errmsg)) - sys.exit(errmsg and 1 or 0) + return 1 + return 0 + +def main(os_sys, args_in): + global os_system + global args + os_system = os_sys + args = args_in -def main(): - argc = len(sys.argv) + argc = len(args) if argc < 2: - usage_and_exit('Not enough arguments.') - subcommand = sys.argv[1] + return usage_and_exit('Not enough arguments.') + subcommand = args[1] if subcommand == 'help': - usage_and_exit() + return usage_and_exit() elif subcommand == 'help-format': msg = FORMAT_HELP.replace("__SCRIPTNAME__", - os.path.basename(sys.argv[0])) + os.path.basename(args[0])) sys.stdout.write(msg) + return 1 elif subcommand == 'examine': if argc < 3: - usage_and_exit('No viewspec file specified.') - fp = (sys.argv[2] == '-') and sys.stdin or open(sys.argv[2], 'r') + return usage_and_exit('No viewspec file specified.') + fp = (args[2] == '-') and sys.stdin or open(args[2], 'r') viewspec = parse_viewspec(fp) sys.stdout.write("Url: %s\n" % (viewspec.base_url)) revision = viewspec.revision @@ -336,13 +345,14 @@ def main(): viewspec.tree.dump(True) elif subcommand == 'checkout': if argc < 3: - usage_and_exit('No viewspec file specified.') + return usage_and_exit('No viewspec file specified.') if argc < 4: - usage_and_exit('No target directory specified.') - fp = (sys.argv[2] == '-') and sys.stdin or open(sys.argv[2], 'r') - checkout_spec(parse_viewspec(fp), sys.argv[3]) + return usage_and_exit('No target directory specified.') + fp = (args[2] == '-') and sys.stdin or open(args[2], 'r') + checkout_spec(parse_viewspec(fp), args[3]) else: - usage_and_exit('Unknown subcommand "%s".' % (subcommand)) + return usage_and_exit('Unknown subcommand "%s".' % (subcommand)) if __name__ == "__main__": - main() + if main(os.system, sys.argv): + sys.exit(1) Modified: subversion/branches/shelve-checkpoint/tools/client-side/svnconflict/svnconflict.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/client-side/svnconflict/svnconflict.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/client-side/svnconflict/svnconflict.c (original) +++ subversion/branches/shelve-checkpoint/tools/client-side/svnconflict/svnconflict.c Mon Apr 16 12:21:02 2018 @@ -148,18 +148,19 @@ static const int svnconflict_global_opti { opt_auth_username, opt_auth_password, opt_auth_password_from_stdin, opt_config_dir, opt_config_options, 0 }; -static const svn_opt_subcommand_desc2_t svnconflict_cmd_table[] = +static const svn_opt_subcommand_desc3_t svnconflict_cmd_table[] = { /* This command is also invoked if we see option "--help", "-h" or "-?". */ - { "help", svnconflict_help, {"?", "h"}, N_ - ("Describe the usage of this program or its subcommands.\n" - "usage: help [SUBCOMMAND...]\n"), + { "help", svnconflict_help, {"?", "h"}, {N_( + "Describe the usage of this program or its subcommands.\n" + "usage: help [SUBCOMMAND...]\n" + )}, {0} }, - { "list", svnconflict_list, {"ls"}, N_ - ("List conflicts at a conflicted path.\n" + { "list", svnconflict_list, {"ls"}, {N_( + "List conflicts at a conflicted path.\n" "usage: list PATH\n" - "\n" + "\n"), N_( " List conflicts at PATH, one per line. Possible conflicts are:\n" " \n" " text-conflict\n" @@ -176,67 +177,67 @@ static const svn_opt_subcommand_desc2_t " If a tree conflict exists, no text or property conflicts exist.\n" " \n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "options-text", svnconflict_options_text, {0}, N_ - ("List options for resolving a text conflict at path.\n" + { "options-text", svnconflict_options_text, {0}, {N_( + "List options for resolving a text conflict at path.\n" "usage: options-text PATH\n" - "\n" + "\n"), N_( " List text conflict resolution options at PATH, one per line.\n" " Each line contains a numeric option ID, a colon, and a description.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "options-prop", svnconflict_options_prop, {0}, N_ - ("List options for resolving a property conflict at path.\n" + { "options-prop", svnconflict_options_prop, {0}, {N_( + "List options for resolving a property conflict at path.\n" "usage: options-prop PATH\n" - "\n" + "\n"), N_( " List property conflict resolution options at PATH, one per line.\n" " Each line contains a numeric option ID, a colon, and a description.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "options-tree", svnconflict_options_tree, {0}, N_ - ("List options for resolving a tree conflict at path.\n" + { "options-tree", svnconflict_options_tree, {0}, {N_( + "List options for resolving a tree conflict at path.\n" "usage: options-tree PATH\n" - "\n" + "\n"), N_( " List tree conflict resolution options at PATH, one per line.\n" " Each line contains a numeric option ID, a colon, and a description.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "resolve-text", svnconflict_resolve_text, {0}, N_ - ("Resolve the text conflict at path.\n" + { "resolve-text", svnconflict_resolve_text, {0}, {N_( + "Resolve the text conflict at path.\n" "usage: resolve-text OPTION_ID PATH\n" - "\n" + "\n"), N_( " Resolve the text conflict at PATH with a given resolution option.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "resolve-prop", svnconflict_resolve_prop, {0}, N_ - ("Resolve the property conflict at path.\n" + { "resolve-prop", svnconflict_resolve_prop, {0}, {N_( + "Resolve the property conflict at path.\n" "usage: resolve-prop PROPNAME OPTION_ID PATH\n" - "\n" + "\n"), N_( " Resolve conflicted property PROPNAME at PATH with a given resolution option.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { "resolve-tree", svnconflict_resolve_tree, {0}, N_ - ("Resolve the tree conflict at path.\n" + { "resolve-tree", svnconflict_resolve_tree, {0}, {N_( + "Resolve the tree conflict at path.\n" "usage: resolve-tree OPTION_ID PATH\n" - "\n" + "\n"), N_( " Resolve the tree conflict at PATH with a given resolution option.\n" " If PATH is not in conflict, the exit code will be 1, and 0 otherwise.\n" - ""), + )}, {0}, }, - { NULL, NULL, {0}, NULL, {0} } + { NULL, NULL, {0}, {NULL}, {0} } }; /* Version compatibility check */ @@ -297,7 +298,7 @@ svnconflict_help(apr_getopt_t *os, void SVN_ERR(svn_ra_print_modules(version_footer, pool)); } - SVN_ERR(svn_opt_print_help4(os, + SVN_ERR(svn_opt_print_help5(os, "svnconflict", /* ### erm, derive somehow? */ opt_state ? opt_state->version : FALSE, FALSE, /* quiet */ @@ -641,7 +642,7 @@ sub_main(int *exit_code, int argc, const apr_array_header_t *received_opts; svnconflict_cmd_baton_t command_baton; int i; - const svn_opt_subcommand_desc2_t *subcommand = NULL; + const svn_opt_subcommand_desc3_t *subcommand = NULL; svn_auth_baton_t *ab; svn_config_t *cfg_config; apr_hash_t *cfg_hash; @@ -742,7 +743,7 @@ sub_main(int *exit_code, int argc, const just typos/mistakes. Whatever the case, the subcommand to actually run is svnconflict_help(). */ if (opt_state.help) - subcommand = svn_opt_get_canonical_subcommand2(svnconflict_cmd_table, + subcommand = svn_opt_get_canonical_subcommand3(svnconflict_cmd_table, "help"); /* If we're not running the `help' subcommand, then look for a @@ -754,8 +755,8 @@ sub_main(int *exit_code, int argc, const if (opt_state.version) { /* Use the "help" subcommand to handle the "--version" option. */ - static const svn_opt_subcommand_desc2_t pseudo_cmd = - { "--version", svnconflict_help, {0}, "", + static const svn_opt_subcommand_desc3_t pseudo_cmd = + { "--version", svnconflict_help, {0}, {""}, {opt_version, /* must accept its own option */ opt_config_dir /* all commands accept this */ } }; @@ -778,7 +779,7 @@ sub_main(int *exit_code, int argc, const SVN_ERR(svn_utf_cstring_to_utf8(&first_arg, os->argv[os->ind++], pool)); - subcommand = svn_opt_get_canonical_subcommand2(svnconflict_cmd_table, + subcommand = svn_opt_get_canonical_subcommand3(svnconflict_cmd_table, first_arg); if (subcommand == NULL) { @@ -805,12 +806,12 @@ sub_main(int *exit_code, int argc, const if (opt_id == 'h' || opt_id == '?') continue; - if (! svn_opt_subcommand_takes_option3(subcommand, opt_id, + if (! svn_opt_subcommand_takes_option4(subcommand, opt_id, svnconflict_global_options)) { const char *optstr; const apr_getopt_option_t *badopt = - svn_opt_get_option_from_code2(opt_id, svnconflict_options, + svn_opt_get_option_from_code3(opt_id, svnconflict_options, subcommand, pool); svn_opt_format_option(&optstr, badopt, FALSE, pool); if (subcommand->name[0] == '-') Modified: subversion/branches/shelve-checkpoint/tools/dev/svnmover/svnmover.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/dev/svnmover/svnmover.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/dev/svnmover/svnmover.c (original) +++ subversion/branches/shelve-checkpoint/tools/dev/svnmover/svnmover.c Mon Apr 16 12:21:02 2018 @@ -4042,7 +4042,7 @@ display_version(apr_getopt_t *os, svn_bo version_footer = svn_stringbuf_create(ra_desc_start, pool); SVN_ERR(svn_ra_print_modules(version_footer, pool)); - SVN_ERR(svn_opt_print_help4(NULL, "svnmover", TRUE, _quiet, FALSE, + SVN_ERR(svn_opt_print_help5(NULL, "svnmover", TRUE, _quiet, FALSE, version_footer->data, NULL, NULL, NULL, NULL, NULL, pool)); Modified: subversion/branches/shelve-checkpoint/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c URL: http://svn.apache.org/viewvc/subversion/branches/shelve-checkpoint/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c?rev=1829257&r1=1829256&r2=1829257&view=diff ============================================================================== --- subversion/branches/shelve-checkpoint/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c (original) +++ subversion/branches/shelve-checkpoint/tools/dev/svnraisetreeconflict/svnraisetreeconflict.c Mon Apr 16 12:21:02 2018 @@ -52,7 +52,7 @@ static svn_error_t * version(apr_pool_t *pool) { - return svn_opt_print_help4(NULL, "svnraisetreeconflict", TRUE, FALSE, FALSE, + return svn_opt_print_help5(NULL, "svnraisetreeconflict", TRUE, FALSE, FALSE, NULL, NULL, NULL, NULL, NULL, NULL, pool); }