summaryrefslogtreecommitdiff
path: root/subversion/tests/cmdline/merge_automatic_tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/tests/cmdline/merge_automatic_tests.py')
-rwxr-xr-xsubversion/tests/cmdline/merge_automatic_tests.py137
1 files changed, 105 insertions, 32 deletions
diff --git a/subversion/tests/cmdline/merge_automatic_tests.py b/subversion/tests/cmdline/merge_automatic_tests.py
index 350ae3e..fbdf395 100755
--- a/subversion/tests/cmdline/merge_automatic_tests.py
+++ b/subversion/tests/cmdline/merge_automatic_tests.py
@@ -43,10 +43,10 @@ Wimp = svntest.testcase.Wimp_deco
from svntest.main import SVN_PROP_MERGEINFO
from svntest.main import server_has_mergeinfo
-from merge_tests import local_path
-from merge_tests import expected_merge_output
-from merge_tests import svn_merge
-from merge_tests import set_up_branch
+from svntest.mergetrees import local_path
+from svntest.mergetrees import expected_merge_output
+from svntest.mergetrees import svn_merge
+from svntest.mergetrees import set_up_branch
#----------------------------------------------------------------------
@@ -188,7 +188,7 @@ def logical_changes_in_branch(sbox, branch):
def get_mergeinfo_change(sbox, target):
"""Return a list of revision numbers representing the mergeinfo change
on TARGET (working version against base). Non-recursive."""
- exit, out, err = actions.run_and_verify_svn(None, None, [],
+ exit, out, err = actions.run_and_verify_svn(None, [],
'diff', '--depth=empty',
sbox.ospath(target))
merged_revs = []
@@ -302,7 +302,7 @@ def automatic_merge(sbox, source, target, args=[],
before_changes = logical_changes_in_branch(sbox, target)
exp_out = expected_automatic_merge_output(target, expect_3ways)
- exit, out, err = svntest.actions.run_and_verify_svn(None, exp_out, [],
+ exit, out, err = svntest.actions.run_and_verify_svn(exp_out, [],
'merge',
'^/' + source, target,
*args)
@@ -334,7 +334,6 @@ def three_way_merge_no_op(base_node, source_right_node):
def cherry_pick(sbox, rev, source, target):
"""Cherry-pick merge revision REV from branch SOURCE to branch TARGET
(both WC-relative paths), and commit."""
- sbox.simple_update(target)
svn_merge(rev, source, target)
sbox.simple_commit()
@@ -691,6 +690,7 @@ def cherry1_fwd(sbox):
# 2 34 5 67 8 9 0 1
init_mod_merge_mod(sbox, mod_6=True, mod_7=False)
+ sbox.simple_update()
modify_branch(sbox, 'A', 8)
cherry_pick(sbox, 8, 'A', 'B')
modify_branch(sbox, 'A', 10)
@@ -782,20 +782,20 @@ def subtree_to_and_fro(sbox):
# r7 - Edit a file on the branch.
svntest.main.file_write(A_COPY_gamma_path, "Branch edit to 'gamma'.\n")
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
+ svntest.actions.run_and_verify_svn(None, [], 'ci', wc_dir,
'-m', 'Edit a file on our branch')
# r8 - Do a subtree sync merge from ^/A/D to A_COPY/D.
# Note that among other things this changes A_COPY/D/H/psi.
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, [], 'merge',
sbox.repo_url + '/A/D', A_COPY_D_path)
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
+ svntest.actions.run_and_verify_svn(None, [], 'ci', wc_dir,
'-m', 'Automatic subtree merge')
# r9 - Make an edit to A/D/H/psi.
svntest.main.file_write(psi_path, "Trunk Edit to 'psi'.\n")
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir,
+ svntest.actions.run_and_verify_svn(None, [], 'ci', wc_dir,
'-m', 'Edit a file on our trunk')
# Now reintegrate ^/A_COPY back to A. Prior to issue #4258's fix, the
@@ -820,9 +820,9 @@ def subtree_to_and_fro(sbox):
# U A
# Summary of conflicts:
# Text conflicts: 1
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir)
exit_code, out, err = svntest.actions.run_and_verify_svn(
- None, [], svntest.verify.AnyOutput,
+ [], svntest.verify.AnyOutput,
'merge', sbox.repo_url + '/A_COPY', A_path)
# Better to produce the same warning that explicitly using the
@@ -876,13 +876,13 @@ def merge_to_reverse_cherry_subtree_to_merge_to(sbox):
# Properties on 'A_COPY\B':
# svn:mergeinfo
# /A/B:2-4,6
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
- svntest.actions.run_and_verify_svn(None, None, [], 'merge',
+ svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, [], 'merge',
sbox.repo_url + '/A', A_COPY_path)
- svntest.actions.run_and_verify_svn(None, None, [], 'merge', '-c-5',
+ svntest.actions.run_and_verify_svn(None, [], 'merge', '-c-5',
sbox.repo_url + '/A/B',
A_COPY_B_path)
- svntest.actions.run_and_verify_svn(None, None, [], 'ci', wc_dir, '-m',
+ svntest.actions.run_and_verify_svn(None, [], 'ci', wc_dir, '-m',
'sync merge and reverse subtree merge')
# Try an automatic sync merge from ^/A to A_COPY. Revision 5 should be
@@ -917,7 +917,7 @@ def merge_to_reverse_cherry_subtree_to_merge_to(sbox):
# ___________________________________________________________________
# Modified: svn:mergeinfo
# Merged /A:r7
- svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
+ svntest.actions.run_and_verify_svn(None, [], 'up', wc_dir)
expected_output = wc.State(A_COPY_path, {
'B/E/beta' : Item(status='U '),
})
@@ -980,8 +980,8 @@ def merge_to_reverse_cherry_subtree_to_merge_to(sbox):
expected_disk,
expected_status,
expected_skip,
- None, None, None, None,
- None, 1, 0, A_COPY_path)
+ [], True, False,
+ A_COPY_path)
#----------------------------------------------------------------------
# Automatic merges should notice ancestory for replaced files
@@ -1073,8 +1073,8 @@ def merge_replacement(sbox):
expected_disk,
expected_status,
expected_skip,
- None, None, None, None,
- None, 1, 0, A_path)
+ [], True, False,
+ A_path)
@SkipUnless(server_has_mergeinfo)
@Issue(4313)
@@ -1117,7 +1117,6 @@ def auto_merge_handles_replacements_in_merge_source(sbox):
# unusual way.
# Please contact the application's support team for more information.
svntest.actions.run_and_verify_svn(
- None,
["--- Recording mergeinfo for merge of r2 into '" + branch2_path + "':\n",
" U " + branch2_path + "\n",
"--- Recording mergeinfo for merge of r3 into '" + branch2_path + "':\n",
@@ -1175,7 +1174,7 @@ def effective_sync_results_in_reintegrate(sbox):
"--- Recording mergeinfo for merge between repository URLs into '" +
A_path + "':\n",
" U " + A_path + "\n"]
- svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
+ svntest.actions.run_and_verify_svn(expected_output, [], 'merge',
sbox.repo_url + '/branch', A_path,
'--reintegrate')
@@ -1198,8 +1197,8 @@ def effective_sync_results_in_reintegrate(sbox):
# Conflict discovered in file 'A\mu'.
# Select: (p) postpone, (df) diff-full, (e) edit, (m) merge,
# (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p
- svntest.actions.run_and_verify_svn(None, None, [], 'revert', A_path, '-R')
- svntest.actions.run_and_verify_svn(None, expected_output, [], 'merge',
+ svntest.actions.run_and_verify_svn(None, [], 'revert', A_path, '-R')
+ svntest.actions.run_and_verify_svn(expected_output, [], 'merge',
sbox.repo_url + '/branch', A_path)
@Issue(4481)
@@ -1225,7 +1224,7 @@ def reintegrate_subtree_not_updated(sbox):
+ sbox.ospath('A/D/G') + "':\n",
" U "
+ sbox.ospath('A/D/G') + "\n"]
- svntest.actions.run_and_verify_svn(None, expected_output, [],
+ svntest.actions.run_and_verify_svn(expected_output, [],
'merge',
sbox.repo_url + '/D_1/G',
sbox.ospath('A/D/G'))
@@ -1238,7 +1237,7 @@ def reintegrate_subtree_not_updated(sbox):
+ sbox.ospath('A/D/H') + "':\n",
" U "
+ sbox.ospath('A/D/H') + "\n"]
- svntest.actions.run_and_verify_svn(None, expected_output, [],
+ svntest.actions.run_and_verify_svn(expected_output, [],
'merge',
sbox.repo_url + '/D_1/H',
sbox.ospath('A/D/H'))
@@ -1274,7 +1273,7 @@ def reintegrate_subtree_not_updated(sbox):
+ sbox.ospath('D_2/G') + "':\n",
" U "
+ sbox.ospath('D_2/G') + "\n"]
- svntest.actions.run_and_verify_svn(None, expected_output, [],
+ svntest.actions.run_and_verify_svn(expected_output, [],
'merge',
sbox.repo_url + '/A/D',
sbox.ospath('D_2'))
@@ -1295,7 +1294,7 @@ def reintegrate_subtree_not_updated(sbox):
+ sbox.ospath('A/D') + "\n",
" U "
+ sbox.ospath('A/D/G') + "\n"]
- svntest.actions.run_and_verify_svn(None, expected_output, [],
+ svntest.actions.run_and_verify_svn(expected_output, [],
'merge',
sbox.repo_url + '/D_2',
sbox.ospath('A/D'))
@@ -1321,13 +1320,85 @@ def reintegrate_subtree_not_updated(sbox):
+ sbox.ospath('D_2') + "\n",
" G "
+ sbox.ospath('D_2/G') + "\n"]
- svntest.actions.run_and_verify_svn(None, expected_output, [],
+ svntest.actions.run_and_verify_svn(expected_output, [],
'merge',
sbox.repo_url + '/A/D',
sbox.ospath('D_2'))
sbox.simple_commit()
sbox.simple_update()
+def merge_to_copy_and_add(sbox):
+ "merge peg to a copy and add"
+
+ sbox.build()
+
+ sbox.simple_copy('A', 'AA')
+ sbox.simple_append('A/mu', 'A/mu')
+ sbox.simple_commit('A')
+
+ # This is the scenario the code is supposed to support; a copy
+ svntest.actions.run_and_verify_svn(None, [],
+ 'merge', '^/A', sbox.ospath('AA'))
+
+ sbox.simple_mkdir('A3')
+ # And this case currently segfaults, because merge doesn't check
+ # if the path has a repository location
+ expected_err = ".*svn: E195012: Can't perform .*A3'.*added.*"
+ svntest.actions.run_and_verify_svn(None, expected_err,
+ 'merge', '^/A', sbox.ospath('A3'))
+ # Try the same merge with --reintegrate, for completeness' sake.
+ expected_err = ".*svn: E195012: Can't reintegrate into .*A3'.*added.*"
+ svntest.actions.run_and_verify_svn(None, expected_err,
+ 'merge', '--reintegrate', '^/A',
+ sbox.ospath('A3'))
+
+def merge_delete_crlf_file(sbox):
+ "merge the deletion of a strict CRLF file"
+
+ sbox.build()
+
+ sbox.simple_copy('A', 'AA')
+
+ # Let commit fix the eols
+ sbox.simple_add_text('with\rCRLF\rhere!', 'A/crlf')
+ sbox.simple_add_text('with\rnative\r\eol', 'A/native')
+ sbox.simple_add_text('with\rCR\r\eol', 'A/cr')
+ sbox.simple_add_text('with\rLF\r\eol', 'A/lf')
+
+ # And apply the magic property
+ sbox.simple_propset('svn:eol-style', 'CRLF', 'A/crlf')
+ sbox.simple_propset('svn:eol-style', 'native', 'A/native')
+ sbox.simple_propset('svn:eol-style', 'CR', 'A/cr')
+ sbox.simple_propset('svn:eol-style', 'LF', 'A/lf')
+
+ sbox.simple_commit('A') # r2
+
+ # Merge the addition of the files
+ svntest.actions.run_and_verify_svn(None, [],
+ 'merge', '^/A', sbox.ospath('AA'))
+ sbox.simple_commit('AA') # r3
+
+ sbox.simple_rm('A/D', 'A/mu', 'A/crlf', 'A/native', 'A/cr', 'A/lf')
+ sbox.simple_commit('A') # r4
+
+ sbox.simple_update('') # Make single revision r4
+
+ # And now merge the deletes
+ expected_output = svntest.verify.UnorderedOutput([
+ '--- Merging r3 through r4 into \'%s\':\n' % sbox.ospath('AA'),
+ 'D %s\n' % sbox.ospath('AA/cr'),
+ 'D %s\n' % sbox.ospath('AA/crlf'),
+ 'D %s\n' % sbox.ospath('AA/lf'),
+ 'D %s\n' % sbox.ospath('AA/native'),
+ 'D %s\n' % sbox.ospath('AA/mu'),
+ 'D %s\n' % sbox.ospath('AA/D'),
+ '--- Recording mergeinfo for merge of r3 through r4 into \'%s\':\n'
+ % sbox.ospath('AA'),
+ ' U %s\n' % sbox.ospath('AA')
+ ])
+ svntest.actions.run_and_verify_svn(expected_output, [],
+ 'merge', '^/A', sbox.ospath('AA'))
+
########################################################################
# Run the tests
@@ -1357,6 +1428,8 @@ test_list = [ None,
auto_merge_handles_replacements_in_merge_source,
effective_sync_results_in_reintegrate,
reintegrate_subtree_not_updated,
+ merge_to_copy_and_add,
+ merge_delete_crlf_file
]
if __name__ == '__main__':