Hi, I'm currently trying to put together a regression test for issue #4647 [1] in order to serve as a test/validation for the patch proposed in [2].
I think I got to the point where the test actually does what I want it to do, but it currently unexpectedly fails with the following output upon the svn resolve -R --accept base call: Any idea what I'm doing wrong? (see attached patch file for the code) Testing Release configuration on local repository. START: resolve_tests.py W: Unexpected output W: EXPECTED STDOUT (unordered): W: | Resolved conflicted state of 's' W: | Resolved conflicted state of 'v' W: | Resolved conflicted state of 'n' W: | Resolved conflicted state of '-' W: | Resolved conflicted state of 't' W: | Resolved conflicted state of 'e' W: | Resolved conflicted state of 's' W: | Resolved conflicted state of 't' W: | Resolved conflicted state of '-' W: | Resolved conflicted state of 'w' W: | Resolved conflicted state of 'o' W: | Resolved conflicted state of 'r' W: | Resolved conflicted state of 'k' W: | Resolved conflicted state of '\' W: | Resolved conflicted state of 'w' W: | Resolved conflicted state of 'o' W: | Resolved conflicted state of 'r' W: | Resolved conflicted state of 'k' W: | Resolved conflicted state of 'i' W: | Resolved conflicted state of 'n' W: | Resolved conflicted state of 'g' W: | Resolved conflicted state of '_' W: | Resolved conflicted state of 'c' W: | Resolved conflicted state of 'o' W: | Resolved conflicted state of 'p' W: | Resolved conflicted state of 'i' W: | Resolved conflicted state of 'e' W: | Resolved conflicted state of 's' W: | Resolved conflicted state of '\' W: | Resolved conflicted state of 'r' W: | Resolved conflicted state of 'e' W: | Resolved conflicted state of 's' W: | Resolved conflicted state of 'o' W: | Resolved conflicted state of 'l' W: | Resolved conflicted state of 'v' W: | Resolved conflicted state of 'e' W: | Resolved conflicted state of '_' W: | Resolved conflicted state of 't' W: | Resolved conflicted state of 'e' W: | Resolved conflicted state of 's' W: | Resolved conflicted state of 't' W: | Resolved conflicted state of 's' W: | Resolved conflicted state of '-' W: | Resolved conflicted state of '8' W: ACTUAL STDOUT: W: DIFF STDOUT (unordered): W: | --- EXPECTED STDOUT (unordered) W: | +++ ACTUAL STDOUT W: | @@ -1,44 +0,0 @@ W: | -Resolved conflicted state of 's' W: | -Resolved conflicted state of 'v' W: | -Resolved conflicted state of 'n' W: | -Resolved conflicted state of '-' W: | -Resolved conflicted state of 't' W: | -Resolved conflicted state of 'e' W: | -Resolved conflicted state of 's' W: | -Resolved conflicted state of 't' W: | -Resolved conflicted state of '-' W: | -Resolved conflicted state of 'w' W: | -Resolved conflicted state of 'o' W: | -Resolved conflicted state of 'r' W: | -Resolved conflicted state of 'k' W: | -Resolved conflicted state of '\' W: | -Resolved conflicted state of 'w' W: | -Resolved conflicted state of 'o' W: | -Resolved conflicted state of 'r' W: | -Resolved conflicted state of 'k' W: | -Resolved conflicted state of 'i' W: | -Resolved conflicted state of 'n' W: | -Resolved conflicted state of 'g' W: | -Resolved conflicted state of '_' W: | -Resolved conflicted state of 'c' W: | -Resolved conflicted state of 'o' W: | -Resolved conflicted state of 'p' W: | -Resolved conflicted state of 'i' W: | -Resolved conflicted state of 'e' W: | -Resolved conflicted state of 's' W: | -Resolved conflicted state of '\' W: | -Resolved conflicted state of 'r' W: | -Resolved conflicted state of 'e' W: | -Resolved conflicted state of 's' W: | -Resolved conflicted state of 'o' W: | -Resolved conflicted state of 'l' W: | -Resolved conflicted state of 'v' W: | -Resolved conflicted state of 'e' W: | -Resolved conflicted state of '_' W: | -Resolved conflicted state of 't' W: | -Resolved conflicted state of 'e' W: | -Resolved conflicted state of 's' W: | -Resolved conflicted state of 't' W: | -Resolved conflicted state of 's' W: | -Resolved conflicted state of '-' W: | -Resolved conflicted state of '8' W: CWD: G:\Projekte\MaxSVN\trunk\Release\subversion\tests\cmdline W: EXCEPTION: SVNLineUnequal Traceback (most recent call last): File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\main.py", line 1852, in run rc = self.pred.run(sandbox) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\testcase.py", line 178, in run result = self.func(sandbox) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\resolve_tests.py", line 647, in automatic_binary_conflict_resolution A_COPY_path) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\actions.py", line 1909, in run_and_verify_resolve _run_and_verify_resolve('resolve', expected_paths, *args) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\actions.py", line 1903, in _run_and_verify_resolve cmd, *args) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\actions.py", line 313, in run_and_verify_svn expected_exit, *varargs) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\actions.py", line 353, in run_and_verify_svn2 expected_stdout, expected_stderr) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\verify.py", line 453, in verify_outputs compare_and_display_lines(message, label, expected, actual, raisable) File "G:\Projekte\MaxSVN\trunk\subversion\tests\cmdline\svntest\verify.py", line 426, in compare_and_display_lines raise raisable SVNLineUnequal FAIL: resolve_tests.py 8: resolve -R --accept [base | mf | tf] binary file END: resolve_tests.py ELAPSED: resolve_tests.py 0:00:02.872000 Traceback (most recent call last): File "win-tests.py", line 1106, in <module> failed = th.run(tests_to_run) File "G:\Projekte\MaxSVN\trunk\build\run_tests.py", line 585, in run log_lines = self.log.readlines() AttributeError: 'NoneType' object has no attribute 'readlines' [1] = https://issues.apache.org/jira/browse/SVN-4647 [2] = http://svn.haxx.se/dev/archive-2016-08/0020.shtml Regards, Stefan
Index: subversion/tests/cmdline/resolve_tests.py =================================================================== --- subversion/tests/cmdline/resolve_tests.py (revision 1743999) +++ subversion/tests/cmdline/resolve_tests.py (working copy) @@ -598,7 +598,68 @@ svntest.main.run_svn(None, 'merge', '-c4,3', '^/iota', 'iota', '--accept=theirs-conflict') +#---------------------------------------------------------------------- +# Test for issue #4647 'auto resolution mine-full fails on binary file' +@XFail() +@Issue(4647) +def automatic_binary_conflict_resolution(sbox): + "resolve -R --accept [base | mf | tf] binary file" + + sbox.build() + wc_dir = sbox.wc_dir + + # Some paths we'll care about + A_COPY_path = os.path.join(wc_dir, "A_COPY") + + # Add a binary file to the project in revision 2. + theta_contents = open(os.path.join(sys.path[0], "theta.bin"), 'rb').read() + theta_path = sbox.ospath('A/theta') + svntest.main.file_write(theta_path, theta_contents, 'wb') + svntest.main.run_svn(None, 'add', theta_path) + svntest.main.run_svn(None, 'commit', '-m', 'log msg', wc_dir) + + # Branch A to A_COPY in revision 3. + svntest.main.run_svn(None, 'copy', wc_dir + "/A", A_COPY_path) + svntest.main.run_svn(None, 'commit', '-m', 'log msg', wc_dir) + + # Modify the binary file on trunk and in the branch, so that both versions + # differ. + theta_branch_path = sbox.ospath('A_COPY/theta') + svntest.main.file_append_binary(theta_path, theta_contents) + svntest.main.run_svn(None, 'commit', '-m', 'log msg', wc_dir) + svntest.main.file_append_binary(theta_branch_path, theta_contents) + svntest.main.file_append_binary(theta_branch_path, theta_contents) + svntest.main.run_svn(None, 'commit', '-m', 'log msg', wc_dir) + + # Run an svn update now to prevent mixed-revision working copy [1:4] error. + svntest.main.run_svn(None, 'update', wc_dir) + + + def do_binary_conflicting_merge(): + svntest.actions.run_and_verify_svn(None, [], + 'revert', '--recursive', A_COPY_path) + svntest.main.run_svn(None, 'merge', sbox.repo_url + "/A_COPY/theta", wc_dir + "/A/theta") + + # Test 'svn resolve -R --accept base' + do_binary_conflicting_merge() + svntest.actions.run_and_verify_resolve(wc_dir, + '-R', '--accept', 'base', + A_COPY_path) + + # Test 'svn resolve -R --accept mine-full' + do_binary_conflicting_merge() + svntest.actions.run_and_verify_resolve(wc_dir, + '-R', '--accept', 'mine-full', + A_COPY_path) + + # Test 'svn resolve -R --accept theirs-full' + do_binary_conflicting_merge() + svntest.actions.run_and_verify_resolve(wc_dir, + '-R', '--accept', 'tf', + A_COPY_path) + + ######################################################################## # Run the tests @@ -611,6 +672,7 @@ resolved_on_deleted_item, theirs_conflict_in_subdir, multi_range_merge_with_accept, + automatic_binary_conflict_resolution, ] if __name__ == '__main__':
smime.p7s
Description: S/MIME Cryptographic Signature