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

