merge_tests.py
来自「linux subdivision ying gai ke yi le ba」· Python 代码 · 共 1,635 行 · 第 1/5 页
PY
1,635 行
'--ignore-ancestry',
base1_url, base2_url, apply_path)
expected_status = wc.State(apply_path, {
'' : Item(status=' '),
'A' : Item(status=' '),
'A/mu' : Item(status='M '),
'A/B' : Item(status=' '),
'A/B/zeta' : Item(status='A ', copied='+'),
'A/B/alpha' : Item(status=' '),
'A/B/beta' : Item(status='D '),
'iota' : Item(status=' '),
})
expected_status.tweak(wc_rev=2, repos_rev=2)
expected_status.tweak('A/B/zeta', wc_rev='-')
svntest.actions.run_and_verify_status(apply_path, expected_status)
#----------------------------------------------------------------------
def merge_one_file(sbox):
"merge one file (issue #1150)"
sbox.build()
wc_dir = sbox.wc_dir
rho_rel_path = os.path.join('A', 'D', 'G', 'rho')
rho_path = os.path.join(wc_dir, rho_rel_path)
G_path = os.path.join(wc_dir, 'A', 'D', 'G')
rho_url = svntest.main.current_repo_url + '/A/D/G/rho'
# Change rho for revision 2
svntest.main.file_append(rho_path, '\nA new line in rho.\n')
expected_output = wc.State(wc_dir, { rho_rel_path : Item(verb='Sending'), })
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.tweak('A/D/G/rho', wc_rev=2)
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
expected_status,
None,
None, None, None, None,
wc_dir)
# Backdate rho to revision 1, so we can merge in the rev 2 changes.
svntest.actions.run_and_verify_svn(None, None, [],
'up', '-r', '1', rho_path)
# Try one merge with an explicit target; it should succeed.
# ### Yes, it would be nice to use run_and_verify_merge(), but it
# appears to be impossible to get the expected_foo trees working
# right. I think something is still assuming a directory target.
svntest.actions.run_and_verify_svn(None,
['U ' + rho_path + '\n'], [],
'merge', '-r', '1:2',
rho_url, rho_path)
expected_status.tweak(wc_rev=1)
expected_status.tweak('A/D/G/rho', status='M ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Inspect rho, make sure it's right.
rho_text = svntest.tree.get_text(rho_path)
if rho_text != "This is the file 'rho'.\nA new line in rho.\n":
print "Unexpected text in merged '" + rho_path + "'"
raise svntest.Failure
# Restore rho to pristine revision 1, for another merge.
svntest.actions.run_and_verify_svn(None, None, [], 'revert', rho_path)
expected_status.tweak('A/D/G/rho', status=' ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Cd into the directory and run merge with no targets.
# It should still merge into rho.
saved_cwd = os.getcwd()
try:
os.chdir(G_path)
# Cannot use run_and_verify_merge with a file target
svntest.actions.run_and_verify_svn(None,
['U rho\n'], [],
'merge', '-r', '1:2', rho_url)
# Inspect rho, make sure it's right.
rho_text = svntest.tree.get_text('rho')
if rho_text != "This is the file 'rho'.\nA new line in rho.\n":
print "Unexpected text merging to 'rho' in '" + G_path + "'"
raise svntest.Failure
finally:
os.chdir(saved_cwd)
expected_status.tweak('A/D/G/rho', status='M ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
# This is a regression for the enhancement added in issue #785.
def merge_with_implicit_target (sbox):
"merging a file with no explicit target path"
sbox.build()
wc_dir = sbox.wc_dir
# Change mu for revision 2
mu_path = os.path.join(wc_dir, 'A', 'mu')
orig_mu_text = svntest.tree.get_text(mu_path)
added_mu_text = ""
for x in range(2,11):
added_mu_text = added_mu_text + '\nThis is line ' + `x` + ' in mu'
added_mu_text += "\n"
svntest.main.file_append(mu_path, added_mu_text)
# Create expected output tree for initial commit
expected_output = wc.State(wc_dir, {
'A/mu' : Item(verb='Sending'),
})
# Create expected status tree; all local revisions should be at 1,
# but mu should be at revision 2.
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.tweak('A/mu', wc_rev=2)
# Initial commit.
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
expected_status,
None,
None, None, None, None,
wc_dir)
# Make the "other" working copy
other_wc = sbox.add_wc_path('other')
svntest.actions.duplicate_dir(wc_dir, other_wc)
# Try the merge without an explicit target; it should succeed.
# Can't use run_and_verify_merge cuz it expects a directory argument.
mu_url = svntest.main.current_repo_url + '/A/mu'
was_cwd = os.getcwd()
try:
os.chdir(os.path.join(other_wc, 'A'))
# merge using URL for sourcepath
svntest.actions.run_and_verify_svn(None, ['U mu\n'], [],
'merge', '-r', '2:1', mu_url)
# sanity-check resulting file
if (svntest.tree.get_text('mu') != orig_mu_text):
raise svntest.Failure
# merge using filename for sourcepath
# Cannot use run_and_verify_merge with a file target
svntest.actions.run_and_verify_svn(None, ['G mu\n'], [],
'merge', '-r', '1:2', 'mu')
# sanity-check resulting file
if (svntest.tree.get_text('mu') != orig_mu_text + added_mu_text):
raise svntest.Failure
finally:
os.chdir(was_cwd)
#----------------------------------------------------------------------
def merge_with_prev (sbox):
"merge operations using PREV revision"
sbox.build()
wc_dir = sbox.wc_dir
# Change mu for revision 2
mu_path = os.path.join(wc_dir, 'A', 'mu')
orig_mu_text = svntest.tree.get_text(mu_path)
added_mu_text = ""
for x in range(2,11):
added_mu_text = added_mu_text + '\nThis is line ' + `x` + ' in mu'
added_mu_text += "\n"
svntest.main.file_append(mu_path, added_mu_text)
zot_path = os.path.join(wc_dir, 'A', 'zot')
svntest.main.file_append(zot_path, "bar")
svntest.main.run_svn(None, 'add', zot_path)
# Create expected output tree for initial commit
expected_output = wc.State(wc_dir, {
'A/mu' : Item(verb='Sending'),
'A/zot' : Item(verb='Adding'),
})
# Create expected status tree; all local revisions should be at 1,
# but mu should be at revision 2.
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.tweak('A', repos_rev=2)
expected_status.tweak('A/mu', wc_rev=2)
expected_status.add({'A/zot' : Item(status=' ', wc_rev=2, repos_rev=2)})
# Initial commit.
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
expected_status,
None,
None, None, None, None,
wc_dir)
# Make some other working copies
other_wc = sbox.add_wc_path('other')
svntest.actions.duplicate_dir(wc_dir, other_wc)
another_wc = sbox.add_wc_path('another')
svntest.actions.duplicate_dir(wc_dir, another_wc)
was_cwd = os.getcwd()
try:
os.chdir(os.path.join(other_wc, 'A'))
# Try to revert the last change to mu via svn merge
# Cannot use run_and_verify_merge with a file target
svntest.actions.run_and_verify_svn(None, ['U mu\n'], [],
'merge', '-r', 'HEAD:PREV', 'mu')
# sanity-check resulting file
if (svntest.tree.get_text('mu') != orig_mu_text):
raise svntest.Failure
finally:
os.chdir(was_cwd)
other_status = expected_status
other_status.wc_dir = other_wc
other_status.tweak('A/mu', status='M ', wc_rev=2)
other_status.tweak('A/zot', wc_rev=2)
svntest.actions.run_and_verify_status(other_wc, other_status)
try:
os.chdir(another_wc)
# ensure 'A' will be at revision 2
svntest.actions.run_and_verify_svn(None, None, [], 'up')
# now try a revert on a directory, and verify that it removed the zot
# file we had added previously
svntest.actions.run_and_verify_svn(None, None, [],
'merge', '-r', 'COMMITTED:PREV',
'A', 'A')
if (svntest.tree.get_text('A/zot') != None):
raise svntest.Failure
finally:
os.chdir(was_cwd)
another_status = expected_status
another_status.wc_dir = another_wc
another_status.tweak(wc_rev=2)
another_status.tweak('A/mu', status='M ')
another_status.tweak('A/zot', status='D ')
svntest.actions.run_and_verify_status(another_wc, another_status)
#----------------------------------------------------------------------
# Regression test for issue #1319: 'svn merge' should *not* 'C' when
# merging a change into a binary file, unless it has local mods, or has
# different contents from the left side of the merge.
def merge_binary_file (sbox):
"merge change into unchanged binary file"
sbox.build()
wc_dir = sbox.wc_dir
# Add a binary file to the project
fp = open(os.path.join(sys.path[0], "theta.bin"))
theta_contents = fp.read() # suck up contents of a test .png file
fp.close()
theta_path = os.path.join(wc_dir, 'A', 'theta')
fp = open(theta_path, 'w')
fp.write(theta_contents) # write png filedata into 'A/theta'
fp.close()
svntest.main.run_svn(None, 'add', theta_path)
# Commit the new binary file, creating revision 2.
expected_output = svntest.wc.State(wc_dir, {
'A/theta' : Item(verb='Adding (bin)'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.add({
'A/theta' : 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)
# Make the "other" working copy
other_wc = sbox.add_wc_path('other')
svntest.actions.duplicate_dir(wc_dir, other_wc)
# Change the binary file in first working copy, commit revision 3.
svntest.main.file_append(theta_path, "some extra junk")
expected_output = wc.State(wc_dir, {
'A/theta' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
expected_status.tweak(wc_rev=1)
expected_status.add({
'A/theta' : 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)
# In second working copy, attempt to 'svn merge -r 2:3'.
# We should *not* see a conflict during the update, but a 'U'.
# And after the merge, the status should be 'M'.
expected_output = wc.State(other_wc, {
'A/theta' : Item(status='U '),
})
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
'A/theta' : Item(theta_contents + "some extra junk",
props={'svn:mime-type' : 'application/octet-stream'}),
})
expected_status = svntest.actions.get_virginal_state(other_wc, 3)
expected_status.tweak(wc_rev=1)
expected_status.add({
'A/theta' : Item(status='M ', wc_rev=2, repos_rev=3),
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?