📄 update_tests.py
字号:
expected_output = svntest.wc.State(wc_dir, { })
expected_status = svntest.actions.get_virginal_state(wc_dir, 3)
expected_status.remove('A/D/G', 'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau',
'A/D/gamma')
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/D/G', 'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau',
'A/D/gamma')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
#----------------------------------------------------------------------
def new_dir_with_spaces(sbox):
"receive new dir with spaces in its name"
sbox.build()
wc_dir = sbox.wc_dir
# Create a new directory ("spacey dir") directly in repository
svntest.actions.run_and_verify_svn(None,
['\n', 'Committed revision 2.\n'], None,
'mkdir', '-m', 'log msg',
svntest.main.current_repo_url
+ '/A/spacey%20dir')
# Update, and make sure ra_dav doesn't choke on the space.
expected_output = svntest.wc.State(wc_dir, {
'A/spacey dir' : Item(status='A '),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.add({
'A/spacey dir' : Item(status=' ', wc_rev=2, repos_rev=2),
})
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
'A/spacey dir' : Item(),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
#----------------------------------------------------------------------
def non_recursive_update(sbox):
"non-recursive update"
sbox.build()
wc_dir = sbox.wc_dir
# Commit a change to A/mu and A/D/G/rho
mu_path = os.path.join(wc_dir, 'A', 'mu')
rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
svntest.main.file_append(mu_path, "new")
svntest.main.file_append(rho_path, "new")
expected_output = svntest.wc.State(wc_dir, {
'A/mu' : Item(verb='Sending'),
'A/D/G/rho' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.tweak(wc_rev=1)
expected_status.tweak('A/mu', '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)
# Update back to revision 1
expected_output = svntest.wc.State(wc_dir, {
'A/mu' : Item(status='U '),
'A/D/G/rho' : Item(status='U '),
})
expected_disk = svntest.main.greek_state.copy()
expected_status.tweak('A/mu', 'A/D/G/rho', wc_rev=1)
svntest.actions.run_and_verify_update(wc_dir, expected_output,
expected_disk, expected_status,
None, None, None, None, None, 0,
'-r', '1', wc_dir)
# Non-recursive update of A should change A/mu but not A/D/G/rho
A_path = os.path.join(wc_dir, 'A')
expected_output = svntest.wc.State(wc_dir, {
'A/mu' : Item(status='U '),
})
expected_status.tweak('A', 'A/mu', wc_rev=2)
expected_disk.tweak('A/mu', contents="This is the file 'mu'.new")
svntest.actions.run_and_verify_update(wc_dir, expected_output,
expected_disk, expected_status,
None, None, None, None, None, 0,
'-N', A_path)
#----------------------------------------------------------------------
def checkout_empty_dir(sbox):
"check out an empty dir"
# See issue #1472 -- checked out empty dir should not be marked as
# incomplete ("!" in status).
sbox.build()
wc_dir = sbox.wc_dir
C_url = svntest.main.current_repo_url + '/A/C'
svntest.main.safe_rmtree(wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'checkout', C_url, wc_dir)
svntest.actions.run_and_verify_svn(None, [], [], 'status', wc_dir)
#----------------------------------------------------------------------
# Regression test for issue #919: "another ghudson bug". Basically, if
# we fore- or back-date an item until it no longer exists, we were
# completely removing the entry, rather than marking it 'deleted'
# (which we now do.)
def update_to_deletion(sbox):
"update target till it's gone, then get it back"
sbox.build()
wc_dir = sbox.wc_dir
iota_path = os.path.join(wc_dir, 'iota')
# Update iota to rev 0, so it gets removed.
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(status='D '),
})
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('iota')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
None, None,
None, None, None, None, 0,
'-r', '0', iota_path)
# Update the wc root, so iota comes back.
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(status='A '),
})
expected_disk = svntest.main.greek_state.copy()
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
None, None,
None, None, None, None, 0,
wc_dir)
#----------------------------------------------------------------------
def update_deletion_inside_out(sbox):
"update child before parent of a deleted tree"
sbox.build()
wc_dir = sbox.wc_dir
parent_path = os.path.join(wc_dir, 'A', 'B')
child_path = os.path.join(parent_path, 'E') # Could be a file, doesn't matter
# Delete the parent directory.
svntest.actions.run_and_verify_svn(None, None, [],
'rm', parent_path)
svntest.actions.run_and_verify_svn(None, None, [],
'ci', '-m', '', wc_dir)
# Update back to r1.
svntest.actions.run_and_verify_svn(None, None, [],
'update', '-r', '1', wc_dir)
# Update just the child to r2.
svntest.actions.run_and_verify_svn(None, None, [],
'update', '-r', '2', child_path)
# Now try a normal update.
expected_output = svntest.wc.State(wc_dir, {
'A/B' : Item(status='D '),
})
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/B', 'A/B/lambda', 'A/B/F',
'A/B/E', 'A/B/E/alpha', 'A/B/E/beta')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
None)
#----------------------------------------------------------------------
# Regression test for issue #1793, whereby 'svn up dir' would delete
# dir if schedule-add. Yikes.
def update_schedule_add_dir(sbox):
"update a schedule-add directory"
sbox.build()
wc_dir = sbox.wc_dir
# Delete directory A/D/G in the repository via immediate commit
G_path = os.path.join(wc_dir, 'A', 'D', 'G')
G_url = svntest.main.current_repo_url + '/A/D/G'
svntest.actions.run_and_verify_svn(None, None, [],
'rm', G_url, '-m', 'rev 2')
# Update the wc to HEAD (r2)
expected_output = svntest.wc.State(wc_dir, {
'A/D/G' : Item(status='D '),
})
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/D/G', 'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.remove('A/D/G', 'A/D/G/pi', 'A/D/G/rho', 'A/D/G/tau')
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
# Do a URL->wc copy, creating a new schedule-add A/D/G.
# (Standard procedure when trying to resurrect the directory.)
D_path = os.path.join(wc_dir, 'A', 'D')
svntest.actions.run_and_verify_svn("Copy error:", None, [],
'cp', '-r', '1', G_url, D_path)
# status should now show the dir scheduled for addition-with-history
expected_status.add({
'A/D/G' : Item(status='A ', copied='+', wc_rev='-', repos_rev=2),
'A/D/G/pi' : Item(status=' ', copied='+', wc_rev='-', repos_rev=2),
'A/D/G/rho' : Item(status=' ', copied='+', wc_rev='-', repos_rev=2),
'A/D/G/tau' : Item(status=' ', copied='+', wc_rev='-', repos_rev=2),
})
svntest.actions.run_and_verify_status (wc_dir, expected_status)
# Now update with the schedule-add dir as the target.
svntest.actions.run_and_verify_svn(None, None, [], 'up', G_path)
# The update should be a no-op, and the schedule-add directory
# should still exist! 'svn status' shouldn't change at all.
svntest.actions.run_and_verify_status (wc_dir, expected_status)
#----------------------------------------------------------------------
# Test updating items that do not exist in the current WC rev, but do
# exist at some future revision.
def update_to_future_add(sbox):
"update target that was added in a future rev"
sbox.build()
wc_dir = sbox.wc_dir
# Update the entire WC to rev 0
# Create expected output tree for an update to rev 0
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(status='D '),
'A' : Item(status='D '),
})
# Create expected disk tree for the update to rev 0
expected_disk = svntest.wc.State(wc_dir, { })
# Do the update and check the results.
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
None, None,
None, None, None, None, 0,
'-r', '0', wc_dir)
# Update iota to the current HEAD.
iota_path = os.path.join(wc_dir, 'iota')
expected_output = svntest.wc.State(wc_dir, {
'iota' : Item(status='A '),
})
expected_disk = svntest.wc.State('', {
'iota' : Item("This is the file 'iota'.")
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
None, None,
None, None, None, None, 0,
iota_path)
# Now try updating the directory into the future
A_path = os.path.join(wc_dir, 'A')
expected_status = svntest.wc.State(wc_dir, {
'A' : Item(status='A '),
'A/mu' : Item(status='A '),
'A/B' : Item(status='A '),
'A/B/lambda' : Item(status='A '),
'A/B/E' : Item(status='A '),
'A/B/E/alpha' : Item(status='A '),
'A/B/E/beta' : Item(status='A '),
'A/B/F' : Item(status='A '),
'A/C' : Item(status='A '),
'A/D' : Item(status='A '),
'A/D/gamma' : Item(status='A '),
'A/D/G' : Item(status='A '),
'A/D/G/pi' : Item(status='A '),
'A/D/G/rho' : Item(status='A '),
'A/D/G/tau' : Item(status='A '),
'A/D/H' : Item(status='A '),
'A/D/H/chi' : Item(status='A '),
'A/D/H/psi' : Item(status='A '),
'A/D/H/omega' : Item(status='A ')
})
expected_disk = svntest.main.greek_state.copy()
svntest.actions.run_and_verify_update(wc_dir,
expected_status,
expected_disk,
None, None,
None, None, None, None, 0,
A_path);
########################################################################
# Run the tests
# list all tests here, starting with None:
test_list = [ None,
update_binary_file,
update_binary_file_2,
update_ignores_added,
update_to_rev_zero,
receive_overlapping_same_change,
update_to_resolve_text_conflicts,
update_delete_modified_files,
update_after_add_rm_deleted,
update_missing,
update_replace_dir,
update_single_file,
prop_update_on_scheduled_delete,
update_receive_illegal_name,
update_deleted_missing_dir,
another_hudson_problem,
new_dir_with_spaces,
non_recursive_update,
checkout_empty_dir,
update_to_deletion,
update_deletion_inside_out,
update_schedule_add_dir,
update_to_future_add,
]
if __name__ == '__main__':
svntest.main.run_tests(test_list)
# NOTREACHED
### End of file.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -