📄 copy_tests.py
字号:
'A/B/newG' : Item(),
'A/B/newG/pi' : Item("This is the file 'pi'."),
'A/B/newG/rho' : Item("This is the file 'rho'."),
'A/B/newG/tau' : Item("This is the file 'tau'."),
})
# Create expected status tree for the update.
expected_status = svntest.actions.get_virginal_state(wc_backup, 2)
expected_status.add({
'A/B/newG' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/newG/pi' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/newG/rho' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/newG/tau' : Item(status=' ', wc_rev=2, repos_rev=2),
})
# Do the update and check the results in three ways.
svntest.actions.run_and_verify_update(wc_backup,
expected_output,
expected_disk,
expected_status)
#----------------------------------------------------------------------
# Regression test for issue #683. In particular, this bug prevented
# us from running 'svn cp -r N src_URL dst_URL' as a means of
# resurrecting a deleted directory. Also, the final 'update' at the
# end of this test was uncovering a ghudson 'deleted' edge-case bug.
# (In particular, re-adding G to D, when D already had a 'deleted'
# entry for G. The entry-merge wasn't overwriting the 'deleted'
# attribute, and thus the newly-added G was ending up disconnected
# from D.)
def resurrect_deleted_dir(sbox):
"resurrect a deleted directory"
sbox.build()
wc_dir = sbox.wc_dir
# Delete directory A/D/G, commit that as r2.
svntest.actions.run_and_verify_svn(None, None, [], 'rm', '--force',
wc_dir + '/A/D/G')
expected_output = svntest.wc.State(wc_dir, {
'A/D/G' : Item(verb='Deleting'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak(repos_rev=2)
expected_status.remove('A/D/G')
expected_status.remove('A/D/G/pi')
expected_status.remove('A/D/G/rho')
expected_status.remove('A/D/G/tau')
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
expected_status,
None,
None, None,
None, None,
wc_dir)
# Use 'svn cp -r 1 URL URL' to resurrect the deleted directory, where
# the two URLs are identical. This used to trigger a failure.
url = svntest.main.current_repo_url + '/A/D/G'
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'-r', '1', url, url,
'-m', 'logmsg')
# For completeness' sake, update to HEAD, and verify we have a full
# greek tree again, all at revision 3.
expected_output = svntest.wc.State(wc_dir, {
'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 '),
})
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)
#----------------------------------------------------------------------
# Test that we're enforcing proper' svn cp' overwrite behavior. Note
# that svn_fs_copy() will always overwrite its destination if an entry
# by the same name already exists. However, libsvn_client should be
# doing existence checks to prevent directories from being
# overwritten, and files can't be overwritten because the RA layers
# are doing out-of-dateness checks during the commit.
def no_copy_overwrites(sbox):
"svn cp URL URL cannot overwrite destination"
sbox.build()
wc_dir = sbox.wc_dir
fileURL1 = svntest.main.current_repo_url + "/A/B/E/alpha"
fileURL2 = svntest.main.current_repo_url + "/A/B/E/beta"
dirURL1 = svntest.main.current_repo_url + "/A/D/G"
dirURL2 = svntest.main.current_repo_url + "/A/D/H"
# Expect out-of-date failure if 'svn cp URL URL' tries to overwrite a file
svntest.actions.run_and_verify_svn("Whoa, I was able to overwrite a file!",
None, SVNAnyOutput,
'cp', fileURL1, fileURL2,
'--username',
svntest.main.wc_author,
'--password',
svntest.main.wc_passwd,
'-m', 'fooogle')
# Create A/D/H/G by running 'svn cp ...A/D/G .../A/D/H'
svntest.actions.run_and_verify_svn(None, None, [],
'cp', dirURL1, dirURL2,
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'-m', 'fooogle')
# Repeat the last command. It should *fail* because A/D/H/G already exists.
svntest.actions.run_and_verify_svn(
"Whoa, I was able to overwrite a directory!",
None, SVNAnyOutput,
'cp', dirURL1, dirURL2,
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'-m', 'fooogle')
#----------------------------------------------------------------------
# Issue 845. A WC -> WC copy will write a destination text-base and
# prop-base, so the destination cannot be a versioned file even if the
# destination is scheduled for deletion.
def no_wc_copy_overwrites(sbox):
"svn cp PATH PATH cannot overwrite destination"
sbox.build()
wc_dir = sbox.wc_dir
# File scheduled for deletion
rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', rho_path)
# File simply missing
tau_path = os.path.join(wc_dir, 'A', 'D', 'G', 'tau')
os.remove(tau_path)
# Status before attempting copies
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/D/G/rho', status='D ')
expected_status.tweak('A/D/G/tau', status='! ')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# These copies should fail
pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
alpha_path = os.path.join(wc_dir, 'A', 'B', 'E', 'alpha')
svntest.actions.run_and_verify_svn("", None, SVNAnyOutput,
'cp', pi_path, rho_path)
svntest.actions.run_and_verify_svn("", None, SVNAnyOutput,
'cp', pi_path, tau_path)
svntest.actions.run_and_verify_svn("", None, SVNAnyOutput,
'cp', pi_path, alpha_path)
# Status after failed copies should not have changed
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
# Takes out working-copy locks for A/B2 and child A/B2/E. At one stage
# during issue 749 the second lock cause an already-locked error.
def copy_modify_commit(sbox):
"copy and tree and modify before commit"
sbox.build()
wc_dir = sbox.wc_dir
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
wc_dir + '/A/B', wc_dir + '/A/B2',
'-m', 'fooogle')
alpha_path = os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha')
svntest.main.file_append(alpha_path, "modified alpha")
expected_output = svntest.wc.State(wc_dir, {
'A/B2' : Item(verb='Adding'),
'A/B2/E/alpha' : Item(verb='Sending'),
})
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
None,
None,
None, None,
None, None,
wc_dir)
#----------------------------------------------------------------------
# Issue 591, at one point copying a file from URL to WC didn't copy
# properties.
def copy_files_with_properties(sbox):
"copy files with properties"
sbox.build()
wc_dir = sbox.wc_dir
# Set a property on a file
rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'pname', 'pval', rho_path)
# and commit it
expected_output = svntest.wc.State(wc_dir, {
'A/D/G/rho' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak(repos_rev=2)
expected_status.tweak('A/D/G/rho', status=' ', wc_rev=2)
svntest.actions.run_and_verify_commit(wc_dir,
expected_output, expected_status,
None, None, None, None, None,
wc_dir)
# Set another property, but don't commit it yet
svntest.actions.run_and_verify_svn(None, None, [],
'propset', 'pname2', 'pval2', rho_path)
# WC to WC copy of file with committed and uncommitted properties
rho_wc_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho_wc')
svntest.actions.run_and_verify_svn(None, None, [],
'copy', rho_path, rho_wc_path)
# REPOS to WC copy of file with properties
rho_url_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho_url')
rho_url = svntest.main.current_repo_url + '/A/D/G/rho'
svntest.actions.run_and_verify_svn(None, None, [],
'copy', rho_url, rho_url_path)
# Properties are not visible in WC status 'A'
expected_status.add({
'A/D/G/rho' : Item(status=' M', wc_rev='2', repos_rev='2'),
'A/D/G/rho_wc' : Item(status='A ', wc_rev='-', repos_rev='2', copied='+'),
'A/D/G/rho_url' : Item(status='A ', wc_rev='-', repos_rev='2', copied='+'),
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Check properties explicitly
svntest.actions.run_and_verify_svn(None, ['pval\n'], [],
'propget', 'pname', rho_wc_path)
svntest.actions.run_and_verify_svn(None, ['pval2\n'], [],
'propget', 'pname2', rho_wc_path)
svntest.actions.run_and_verify_svn(None, ['pval\n'], [],
'propget', 'pname', rho_url_path)
# Commit and properties are visible in status
expected_output = svntest.wc.State(wc_dir, {
'A/D/G/rho' : Item(verb='Sending'),
'A/D/G/rho_wc' : Item(verb='Adding'),
'A/D/G/rho_url' : Item(verb='Adding'),
})
expected_status.tweak(repos_rev=3)
expected_status.tweak('A/D/G/rho', status=' ', wc_rev=3)
expected_status.remove('A/D/G/rho_wc', 'A/D/G/rho_url')
expected_status.add({
'A/D/G/rho_wc' : Item(status=' ', wc_rev=3, repos_rev=3),
'A/D/G/rho_url' : 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)
#----------------------------------------------------------------------
# Issue 918
def copy_delete_commit(sbox):
"copy a tree and delete part of it before commit"
sbox.build()
wc_dir = sbox.wc_dir
# copy a tree
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
wc_dir + '/A/B', wc_dir + '/A/B2',
'-m', 'fooogle')
# delete a file
alpha_path = os.path.join(wc_dir, 'A', 'B2', 'E', 'alpha')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', alpha_path)
# commit copied tree containing a deleted file
expected_output = svntest.wc.State(wc_dir, {
'A/B2' : Item(verb='Adding'),
'A/B2/E/alpha' : Item(verb='Deleting'),
})
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
None,
None,
None, None,
None, None,
wc_dir)
# copy a tree
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
wc_dir + '/A/B', wc_dir + '/A/B3',
'-m', 'fooogle')
# delete a directory
E_path = os.path.join(wc_dir, 'A', 'B3', 'E')
svntest.actions.run_and_verify_svn(None, None, [], 'rm', E_path)
# commit copied tree containing a deleted directory
expected_output = svntest.wc.State(wc_dir, {
'A/B3' : Item(verb='Adding'),
'A/B3/E' : Item(verb='Deleting'),
})
svntest.actions.run_and_verify_commit (wc_dir,
expected_output,
None,
None,
None, None,
None, None,
wc_dir)
#----------------------------------------------------------------------
def mv_and_revert_directory(sbox):
"move and revert a directory"
sbox.build()
wc_dir = sbox.wc_dir
# Issue 931: move failed to lock the directory being deleted
svntest.actions.run_and_verify_svn(None, None, [], 'move',
wc_dir + '/A/B/E',
wc_dir + '/A/B/F')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -