📄 update_tests.py
字号:
F_path = os.path.join(wc_dir, 'A', 'B', 'F')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', alpha_path, F_path)
# Commit deletion
expected_output = svntest.wc.State(wc_dir, {
'A/B/E/alpha' : Item(verb='Deleting'),
'A/B/F' : Item(verb='Deleting'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.remove('A/B/E/alpha')
expected_status.remove('A/B/F')
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None,
None, None, None, None, wc_dir)
# alpha and F are now in state "deleted", next we add a new ones
svntest.main.file_append(alpha_path, "new alpha")
svntest.actions.run_and_verify_svn(None, None, [], 'add', alpha_path)
svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', F_path)
# New alpha and F should be in add state A
expected_status.add({
'A/B/E/alpha' : Item(status='A ', wc_rev=0, repos_rev=2),
'A/B/F' : Item(status='A ', wc_rev=0, repos_rev=2),
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Forced removal of new alpha and F must restore "deleted" state
svntest.actions.run_and_verify_svn(None, None, [], 'rm', '--force',
alpha_path, F_path)
if os.path.exists(alpha_path) or os.path.exists(F_path):
raise svntest.Failure
# "deleted" state is not visible in status
expected_status.remove('A/B/E/alpha', 'A/B/F')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Although parent dir is already at rev 1, the "deleted" state will cause
# alpha and F to be restored in the WC when updated to rev 1
svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir)
expected_status.add({
'A/B/E/alpha' : Item(status=' ', wc_rev=1, repos_rev=2),
'A/B/F' : Item(status=' ', wc_rev=1, repos_rev=2),
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
# Issue 938.
def update_replace_dir(sbox):
"update that replaces a directory"
sbox.build()
wc_dir = sbox.wc_dir
# Delete a directory
F_path = os.path.join(wc_dir, 'A', 'B', 'F')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', F_path)
# Commit deletion
expected_output = svntest.wc.State(wc_dir, {
'A/B/F' : Item(verb='Deleting'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.remove('A/B/F')
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None,
None, None, None, None, wc_dir)
# Add replacement directory
svntest.actions.run_and_verify_svn(None, None, [], 'mkdir', F_path)
# Commit addition
expected_output = svntest.wc.State(wc_dir, {
'A/B/F' : Item(verb='Adding'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
expected_status.tweak(wc_rev=1)
expected_status.tweak('A/B/F', wc_rev=3)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None,
None, None, None, None, wc_dir)
# Update to HEAD
expected_output = svntest.wc.State(wc_dir, {
})
expected_disk = svntest.main.greek_state.copy()
expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
# Update to revision 1 replaces the directory
### I can't get this to work :-(
#expected_output = svntest.wc.State(wc_dir, {
# 'A/B/F' : Item(verb='Adding'),
# 'A/B/F' : Item(verb='Deleting'),
# })
#expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
#expected_status.tweak(repos_rev=3)
#svntest.actions.run_and_verify_update(wc_dir,
# expected_output,
# expected_disk,
# expected_status,
# None, None, None, None, None, 0,
# '-r', '1', wc_dir)
# Update to revision 1 replaces the directory
svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak(repos_rev=3)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
def update_single_file(sbox):
"update with explicit file target"
sbox.build()
wc_dir = sbox.wc_dir
expected_disk = svntest.main.greek_state.copy()
# Make a local mod to a file which will be committed
mu_path = os.path.join(wc_dir, 'A', 'mu')
svntest.main.file_append (mu_path, '\nAppended text for mu')
# Commit.
expected_output = svntest.wc.State(wc_dir, {
'A/mu' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.tweak('A/mu', wc_rev=2)
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None,
None, None, None, None, wc_dir)
# At one stage 'svn up file' failed with a parent lock error
was_cwd = os.getcwd()
os.chdir(os.path.join(wc_dir, 'A'))
try:
### Can't get run_and_verify_update to work having done the chdir.
svntest.actions.run_and_verify_svn("update failed", None, [],
'up', '-r', '1', 'mu')
finally:
os.chdir(was_cwd)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak(repos_rev=2)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
def prop_update_on_scheduled_delete(sbox):
"receive prop update to file scheduled for deletion"
sbox.build()
wc_dir = sbox.wc_dir
other_wc = sbox.add_wc_path('other')
# Make the "other" working copy.
svntest.actions.duplicate_dir(wc_dir, other_wc)
iota_path = os.path.join(wc_dir, 'iota')
other_iota_path = os.path.join(other_wc, 'iota')
svntest.main.run_svn (None, 'propset', 'foo', 'bar', iota_path)
# Created expected output tree for 'svn ci'
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(verb='Sending'),
})
# Create expected status tree
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.tweak('iota', wc_rev=2, repos_rev=2)
# Commit the change, creating revision 2.
svntest.actions.run_and_verify_commit(wc_dir, expected_output,
expected_status, None,
None, None, None, None, wc_dir)
svntest.main.run_svn (None, 'rm', other_iota_path)
# Expected output tree for update of other_wc.
expected_output = svntest.wc.State(other_wc, {
'iota' : Item(status=' U'),
})
# Expected disk tree for the update.
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('iota')
# Expected status tree for the update.
expected_status = svntest.actions.get_virginal_state(other_wc, 2)
expected_status.tweak('iota', status='D ')
# Do the update and check the results in three ways.
svntest.actions.run_and_verify_update(other_wc,
expected_output,
expected_disk,
expected_status)
#----------------------------------------------------------------------
def update_receive_illegal_name(sbox):
"bail when receive a file or dir named .svn"
sbox.build()
wc_dir = sbox.wc_dir
# This tests the revision 4334 fix for issue #1068.
legal_url = svntest.main.current_repo_url + '/A/D/G/svn'
illegal_url = svntest.main.current_repo_url + '/A/D/G/.svn'
# Ha! The client doesn't allow us to mkdir a '.svn' but it does
# allow us to copy to a '.svn' so ...
svntest.actions.run_and_verify_svn(None, None, [],
'mkdir', '-m', 'log msg',
legal_url)
svntest.actions.run_and_verify_svn(None, None, [],
'mv', '-m', 'log msg',
legal_url, illegal_url)
# Do the update twice, both should fail. After the first failure
# the wc will be marked "incomplete".
for n in range(2):
out, err = svntest.main.run_svn(1, 'up', wc_dir)
for line in err:
if line.find("object of the same name already exists") != -1:
break
else:
raise svntest.Failure
# At one stage an obstructed update in an incomplete wc would leave
# a txn behind
out, err = svntest.main.run_svnadmin('lstxns', sbox.repo_dir)
if out or err:
raise svntest.Failure
#----------------------------------------------------------------------
def update_deleted_missing_dir(sbox):
"update missing dir to rev in which it is absent"
sbox.build()
wc_dir = sbox.wc_dir
E_path = os.path.join(wc_dir, 'A', 'B', 'E')
H_path = os.path.join(wc_dir, 'A', 'D', 'H')
# Create a new revision with directories deleted
svntest.main.run_svn(None, 'rm', E_path)
svntest.main.run_svn(None, 'rm', H_path)
svntest.main.run_svn(None, 'ci', '-m', 'log msg', E_path, H_path)
# Update back to the old revision
svntest.main.run_svn(None, 'up', '-r', '1', wc_dir)
# Delete the directories from disk
svntest.main.safe_rmtree(E_path)
svntest.main.safe_rmtree(H_path)
# Create expected output tree for an update of the missing items by name
expected_output = svntest.wc.State(wc_dir, {
'A/B/E' : Item(status='D '),
'A/D/H' : Item(status='D '),
})
# Create expected disk tree for the update.
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta')
expected_disk.remove('A/D/H', 'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi')
# Create expected status tree for the update.
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.remove('A/B/E', 'A/B/E/alpha', 'A/B/E/beta')
expected_status.remove('A/D/H', 'A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi')
expected_status.tweak(wc_rev=1, repos_rev=2)
# Do the update, specifying the deleted paths explicitly.
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status,
None, None, None, None, None,
0, "-r", "2", E_path, H_path)
# Update back to the old revision again
svntest.main.run_svn(None, 'up', '-r', '1', wc_dir)
# Delete the directories from disk
svntest.main.safe_rmtree(E_path)
svntest.main.safe_rmtree(H_path)
# This time we're updating the whole working copy
expected_status.tweak(wc_rev=2, repos_rev=2)
# Do the update, on the whole working copy this time
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status,
None, None, None, None, None,
0, "-r", "2", wc_dir)
#----------------------------------------------------------------------
# Issue 919. This test was written as a regression test for "item
# should remain 'deleted' when an update deletes a sibling", but it
# fails due to issue 919.
def another_hudson_problem(sbox):
"another \"hudson\" problem: updates that delete"
sbox.build()
wc_dir = sbox.wc_dir
# Delete/commit gamma thus making it 'deleted'
gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma')
svntest.main.run_svn(None, 'rm', gamma_path)
expected_output = svntest.wc.State(wc_dir, {
'A/D/gamma' : Item(verb='Deleting'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.remove('A/D/gamma')
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
expected_status,
None, None, None, None, None,
wc_dir)
# Delete directory G from the repository
svntest.actions.run_and_verify_svn(None,
['\n', 'Committed revision 3.\n'], None,
'rm', '-m', 'log msg',
svntest.main.current_repo_url + '/A/D/G')
# Remove corresponding tree from working copy
G_path = os.path.join(wc_dir, 'A', 'D', 'G')
svntest.main.safe_rmtree(G_path)
# Update missing directory to receive the delete, this should mark G
# as 'deleted' and should not alter gamma's entry.
# Sigh, I can't get run_and_verify_update to work (but not because
# of issue 919 as far as I can tell)
svntest.actions.run_and_verify_svn(None,
['D '+G_path+'\n',
'Updated to revision 3.\n'], None,
'up', G_path)
# Both G and gamma should be 'deleted', update should produce no output
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -