merge_tests.py
来自「linux subdivision ying gai ke yi le ba」· Python 代码 · 共 1,635 行 · 第 1/5 页
PY
1,635 行
# Ouch, mom, I've got conflicts on my conflicts!
contents="<<<<<<< .working\n"
+ "<<<<<<< .working\n"
+ expected_disk.desc['tau'].contents
+ other_tau_text
+ "=======\n"
+ expected_disk.desc['tau'].contents
+ tau_text
+ ">>>>>>> .merge-right.r3\n"
+ "=======\n"
+ expected_disk.desc['tau'].contents
+ tau_text
+ ">>>>>>> .merge-right.r3\n"
)
expected_status = wc.State(os.path.join(other_wc, 'A', 'D', 'G'),
{ '' : Item(wc_rev=1, status=' '),
'rho' : Item(wc_rev=2, status='G '),
'pi' : Item(wc_rev=1, status='G '),
'tau' : Item(wc_rev=1, status='C '),
})
expected_status.tweak(repos_rev=3)
expected_status.tweak('pi', status='M ')
expected_status.tweak('rho', status='M ')
expected_status.tweak('tau', status='C ')
svntest.actions.run_and_verify_merge(
os.path.join(other_wc, 'A', 'D', 'G'),
'2', '3',
svntest.main.current_repo_url + '/A/D/G',
expected_output,
expected_disk,
expected_status,
expected_skip,
None, merge_singleton_handler)
#----------------------------------------------------------------------
# Merge should copy-with-history when adding files or directories
def add_with_history(sbox):
"merge and add new files/dirs with history"
sbox.build()
wc_dir = sbox.wc_dir
C_path = os.path.join(wc_dir, 'A', 'C')
F_path = os.path.join(wc_dir, 'A', 'B', 'F')
F_url = svntest.main.current_repo_url + '/A/B/F'
Q_path = os.path.join(F_path, 'Q')
foo_path = os.path.join(F_path, 'foo')
bar_path = os.path.join(F_path, 'Q', 'bar')
svntest.main.run_svn(None, 'mkdir', Q_path)
svntest.main.file_append(foo_path, "foo")
svntest.main.file_append(bar_path, "bar")
svntest.main.run_svn(None, 'add', foo_path, bar_path)
expected_output = wc.State(wc_dir, {
'A/B/F/Q' : Item(verb='Adding'),
'A/B/F/Q/bar' : Item(verb='Adding'),
'A/B/F/foo' : Item(verb='Adding'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.add({
'A/B/F/Q' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/F/Q/bar' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/F/foo' : Item(status=' ', wc_rev=2, repos_rev=2),
})
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
None,
None, None,
None, None,
wc_dir)
### Full-to-dry-run automatic comparison disabled since --dry-run
### skips added files in an added directory
expected_output = wc.State(C_path, {
'Q' : Item(status='A '),
'foo' : Item(status='A '),
})
expected_disk = wc.State('', { })
expected_status = wc.State(C_path, {
'' : Item(status=' ', wc_rev=1, repos_rev=2),
})
expected_skip = wc.State(C_path, {
'Q/bar' : Item(),
})
svntest.actions.run_and_verify_merge(C_path, '1', '2', F_url,
expected_output,
expected_disk,
expected_status,
expected_skip,
None, None, None, None, None,
0, 0,
'--dry-run')
expected_output.add({
'Q/bar' : Item(status='A '),
})
expected_disk.add({
'Q' : Item(),
'Q/bar' : Item("bar"),
'foo' : Item("foo"),
})
expected_status.add({
'Q' : Item(status='A ', wc_rev='-', copied='+', repos_rev=2),
'Q/bar' : Item(status='A ', wc_rev='-', copied='+', repos_rev=2),
'foo' : Item(status='A ', wc_rev='-', copied='+', repos_rev=2),
})
expected_skip.remove('Q/bar')
svntest.actions.run_and_verify_merge(C_path, '1', '2', F_url,
expected_output,
expected_disk,
expected_status,
expected_skip,
None, None, None, None, None,
0, 0)
expected_output = svntest.wc.State(wc_dir, {
'A/C/Q' : Item(verb='Adding'),
'A/C/Q/bar' : Item(verb='Adding'),
'A/C/foo' : Item(verb='Adding'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
expected_status.tweak(wc_rev=1)
expected_status.add({
'A/B/F/Q' : Item(status=' ', wc_rev=2, repos_rev=3),
'A/B/F/Q/bar' : Item(status=' ', wc_rev=2, repos_rev=3),
'A/B/F/foo' : Item(status=' ', wc_rev=2, repos_rev=3),
'A/C/Q' : Item(status=' ', wc_rev=3, repos_rev=3),
'A/C/Q/bar' : Item(status=' ', wc_rev=3, repos_rev=3),
'A/C/foo' : Item(status=' ', wc_rev=3, repos_rev=3),
})
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
None,
None, None,
None, None,
wc_dir)
#----------------------------------------------------------------------
def delete_file_and_dir(sbox):
"merge that deletes items"
sbox.build()
wc_dir = sbox.wc_dir
# Rev 2 copy B to B2
B_path = os.path.join(wc_dir, 'A', 'B')
B2_path = os.path.join(wc_dir, 'A', 'B2')
B_url = svntest.main.current_repo_url + '/A/B'
svntest.actions.run_and_verify_svn(None, None, [],
'copy', B_path, B2_path)
expected_output = wc.State(wc_dir, {
'A/B2' : Item(verb='Adding'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.add({
'A/B2' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B2/E' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B2/E/alpha' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B2/E/beta' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B2/F' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B2/lambda' : Item(status=' ', wc_rev=2, repos_rev=2),
})
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
None,
None, None,
None, None,
wc_dir)
# Rev 3 delete E and lambda from B
E_path = os.path.join(B_path, 'E')
lambda_path = os.path.join(B_path, 'lambda')
svntest.actions.run_and_verify_svn(None, None, [],
'delete', E_path, lambda_path)
expected_output = wc.State(wc_dir, {
'A/B/E' : Item(verb='Deleting'),
'A/B/lambda' : Item(verb='Deleting'),
})
expected_status.tweak(repos_rev=3)
expected_status.remove('A/B/E',
'A/B/E/alpha',
'A/B/E/beta',
'A/B/lambda')
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
None,
None, None,
None, None,
wc_dir)
# Local mods in B2
B2_E_path = os.path.join(B2_path, 'E')
B2_lambda_path = os.path.join(B2_path, 'lambda')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
B2_E_path, B2_lambda_path)
expected_status.tweak(
'A/B2/E', 'A/B2/lambda', status=' M'
)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Merge rev 3 into B2
# Local mods cause everything to be skipped without --force
expected_output = wc.State(B2_path, { })
expected_disk = wc.State('', {
'E' : Item(),
'E/alpha' : Item("This is the file 'alpha'."),
'E/beta' : Item("This is the file 'beta'."),
'F' : Item(),
'lambda' : Item("This is the file 'lambda'."),
})
expected_status = wc.State(B2_path, {
'' : Item(status=' '),
'E' : Item(status=' M'),
'E/alpha' : Item(status=' '),
'E/beta' : Item(status=' '),
'F' : Item(status=' '),
'lambda' : Item(status=' M'),
})
expected_status.tweak(wc_rev=2, repos_rev=3)
expected_skip = wc.State(B2_path, {
'lambda' : Item(),
'E' : Item(),
})
svntest.actions.run_and_verify_merge(B2_path, '2', '3', B_url,
expected_output,
expected_disk,
expected_status,
expected_skip)
expected_output = wc.State(B2_path, {
'E' : Item(status='D '),
'E/alpha' : Item(status='D '),
'E/beta' : Item(status='D '),
'lambda' : Item(status='D '),
})
expected_disk.remove('E/alpha', 'E/beta', 'lambda')
expected_status.tweak('E', 'E/alpha', 'E/beta', 'lambda', status='D ')
expected_skip.remove('lambda', 'E')
### Full-to-dry-run automatic comparison disabled because a) dry-run
### doesn't descend into deleted directories, and b) the full merge
### notifies deleted directories twice.
svntest.actions.run_and_verify_merge(B2_path, '2', '3', B_url,
expected_output,
expected_disk,
expected_status,
expected_skip,
None, None, None, None, None,
0, 0, '--force')
#----------------------------------------------------------------------
# Issue 953
def simple_property_merges(sbox):
"some simple property merges"
sbox.build()
wc_dir = sbox.wc_dir
# Add a property to a file and a directory
alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
E_path = os.path.join(wc_dir, 'A', 'B', 'E')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
alpha_path)
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'foo_val',
E_path)
# Commit change as rev 2
expected_output = svntest.wc.State(wc_dir, {
'A/B/E' : Item(verb='Sending'),
'A/B/E/alpha' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak(repos_rev=2)
expected_status.tweak('A/B/E', 'A/B/E/alpha', wc_rev=2, status=' ')
svntest.actions.run_and_verify_commit (wc_dir,
expected_output, expected_status,
None, None, None, None, None,
wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
# Copy B to B2 as rev 3
B_url = svntest.main.current_repo_url + '/A/B'
B2_url = svntest.main.current_repo_url + '/A/B2'
svntest.actions.run_and_verify_svn(None, None, [],
'copy', '-m', 'fumble',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
B_url, B2_url)
svntest.actions.run_and_verify_svn(None, None, [], 'up', wc_dir)
# Modify a property and add a property for the file and directory
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'mod_foo', alpha_path)
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'bar', 'bar_val', alpha_path)
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'foo', 'mod_foo', E_path)
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'bar', 'bar_val', E_path)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?