📄 copy_tests.py
字号:
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.tweak('A/B/E', 'A/B/E/alpha', 'A/B/E/beta', status='D ')
expected_status.add({
'A/B/F/E' : Item(status='A ', wc_rev='-', repos_rev='1', copied='+'),
'A/B/F/E/alpha' : Item(status=' ', wc_rev='-', repos_rev='1', copied='+'),
'A/B/F/E/beta' : Item(status=' ', wc_rev='-', repos_rev='1', copied='+'),
})
svntest.actions.run_and_verify_status(wc_dir, expected_status)
# Issue 932: revert failed to lock the parent directory
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '--recursive',
wc_dir + '/A/B/F/E')
expected_status.remove('A/B/F/E', 'A/B/F/E/alpha', 'A/B/F/E/beta')
svntest.actions.run_and_verify_status(wc_dir, expected_status)
#----------------------------------------------------------------------
# Issue 982. When copying a file with the executable bit set, the copied
# file should also have its executable bit set.
def copy_preserve_executable_bit(sbox):
"executable bit should be preserved when copying"
# Bootstrap
sbox.build()
wc_dir = sbox.wc_dir
# Create two paths
newpath1 = os.path.join(wc_dir, 'newfile1')
newpath2 = os.path.join(wc_dir, 'newfile2')
# Create the first file.
svntest.main.file_append(newpath1, "a new file")
svntest.actions.run_and_verify_svn(None, None, [], 'add', newpath1)
mode1 = os.stat(newpath1)[stat.ST_MODE]
# Doing this to get the executable bit set on systems that support
# that -- the property itself is not the point.
svntest.actions.run_and_verify_svn(None, None, [], 'propset',
'svn:executable', 'on', newpath1)
mode2 = os.stat(newpath1)[stat.ST_MODE]
if mode1 == mode2:
print "setting svn:executable did not change file's permissions"
raise svntest.Failure
# Commit the file
svntest.actions.run_and_verify_svn(None, None, [], 'ci',
'-m', 'create file and set svn:executable',
wc_dir)
# Copy the file
svntest.actions.run_and_verify_svn(None, None, [], 'cp', newpath1, newpath2)
mode3 = os.stat(newpath2)[stat.ST_MODE]
# The mode on the original and copied file should be identical
if mode2 != mode3:
print "permissions on the copied file are not identical to original file"
raise svntest.Failure
#----------------------------------------------------------------------
# Issue 1029, copy failed with a "working copy not locked" error
def wc_to_repos(sbox):
"working-copy to repository copy"
sbox.build()
wc_dir = sbox.wc_dir
beta_path = os.path.join(wc_dir, "A", "B", "E", "beta")
beta2_url = svntest.main.current_repo_url + "/A/B/E/beta2"
H_path = os.path.join(wc_dir, "A", "D", "H")
H2_url = svntest.main.current_repo_url + "/A/D/H2"
# modify some items to be copied
svntest.main.file_append(os.path.join(wc_dir, 'A', 'D', 'H', 'omega'),
"new otext")
svntest.actions.run_and_verify_svn(None, None, [], 'propset', 'foo', 'bar',
beta_path)
# copy a file
svntest.actions.run_and_verify_svn(None, None, [], '-m', 'fumble file',
'copy', beta_path, beta2_url)
# and a directory
svntest.actions.run_and_verify_svn(None, None, [], '-m', 'fumble dir',
'copy', H_path, H2_url)
# copy a file to a directory
svntest.actions.run_and_verify_svn(None, None, [], '-m', 'fumble file',
'copy', beta_path, H2_url)
expected_output = svntest.wc.State(wc_dir, {
'A/B/E/beta2' : Item(status='A '),
'A/D/H2' : Item(status='A '),
'A/D/H2/chi' : Item(status='A '),
'A/D/H2/omega' : Item(status='A '),
'A/D/H2/psi' : Item(status='A '),
'A/D/H2/beta' : Item(status='A '),
})
expected_disk = svntest.main.greek_state.copy()
expected_disk.tweak('A/D/H/omega',
contents="This is the file 'omega'.new otext")
expected_disk.add({
'A/B/E/beta2' : Item("This is the file 'beta'."),
'A/D/H2/chi' : Item("This is the file 'chi'."),
'A/D/H2/omega' : Item("This is the file 'omega'.new otext"),
'A/D/H2/psi' : Item("This is the file 'psi'."),
'A/D/H2/beta' : Item("This is the file 'beta'."),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 4)
expected_status.add({
'A/B/E/beta' : Item(status=' M', wc_rev=4, repos_rev=4),
'A/D/H/omega' : Item(status='M ', wc_rev=4, repos_rev=4),
'A/B/E/beta2' : Item(status=' ', wc_rev=4, repos_rev=4),
'A/D/H2' : Item(status=' ', wc_rev=4, repos_rev=4),
'A/D/H2/chi' : Item(status=' ', wc_rev=4, repos_rev=4),
'A/D/H2/omega' : Item(status=' ', wc_rev=4, repos_rev=4),
'A/D/H2/psi' : Item(status=' ', wc_rev=4, repos_rev=4),
'A/D/H2/beta' : Item(status=' ', wc_rev=4, repos_rev=4),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
# check local property was copied
svntest.actions.run_and_verify_svn(None, ['bar\n'], [], 'propget', 'foo',
beta_path + "2")
#----------------------------------------------------------------------
# Issue 1090: various use-cases of 'svn cp URL wc' where the
# repositories might be different, or be the same repository.
def repos_to_wc(sbox):
"repository to working-copy copy"
sbox.build()
wc_dir = sbox.wc_dir
# We have a standard repository and working copy. Now we create a
# second repository with the same greek tree, but different UUID.
repo_dir = sbox.repo_dir
repo_url = sbox.repo_url
other_repo_dir, other_repo_url = sbox.add_repo_path('other')
svntest.main.copy_repos(repo_dir, other_repo_dir, 1, 1)
# URL->wc copy:
# copy a file and a directory from the same repository.
# we should get some scheduled additions *with history*.
E_url = svntest.main.current_repo_url + "/A/B/E"
pi_url = svntest.main.current_repo_url + "/A/D/G/pi"
svntest.actions.run_and_verify_svn(None, None, [], 'copy', E_url, wc_dir)
svntest.actions.run_and_verify_svn(None, None, [], 'copy', pi_url, wc_dir)
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
expected_output.add({
'pi' : Item(status='A ', copied='+', wc_rev='-', repos_rev=1),
'E' : Item(status='A ', copied='+', wc_rev='-', repos_rev=1),
'E/alpha' : Item(status=' ', copied='+', wc_rev='-', repos_rev=1),
'E/beta' : Item(status=' ', copied='+', wc_rev='-', repos_rev=1),
})
svntest.actions.run_and_verify_status (wc_dir, expected_output)
# Revert everything and verify.
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
svntest.main.safe_rmtree(os.path.join(wc_dir, 'E'))
os.unlink(os.path.join(wc_dir, 'pi'))
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status (wc_dir, expected_output)
# URL->wc copy:
# Copy an empty directory from the same repository, see issue #1444.
C_url = svntest.main.current_repo_url + "/A/C"
svntest.actions.run_and_verify_svn(None, None, [], 'copy', C_url, wc_dir)
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
expected_output.add({
'C' : Item(status='A ', copied='+', wc_rev='-', repos_rev=1),
})
svntest.actions.run_and_verify_status (wc_dir, expected_output)
# Revert everything and verify.
svntest.actions.run_and_verify_svn(None, None, [], 'revert', '-R', wc_dir)
svntest.main.safe_rmtree(os.path.join(wc_dir, 'C'))
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status (wc_dir, expected_output)
# URL->wc copy:
# copy a file and a directory from a foreign repository.
# we should get some scheduled additions *without history*.
E_url = other_repo_url + "/A/B/E"
pi_url = other_repo_url + "/A/D/G/pi"
# Expect an error in the directory case
svntest.actions.run_and_verify_svn("", None, SVNAnyOutput,
'copy', E_url, wc_dir)
# But file case should work fine.
svntest.actions.run_and_verify_svn(None, None, [], 'copy', pi_url, wc_dir)
expected_output = svntest.actions.get_virginal_state(wc_dir, 1)
expected_output.add({
'pi' : Item(status='A ', wc_rev='0', repos_rev=1),
})
svntest.actions.run_and_verify_status (wc_dir, expected_output)
#----------------------------------------------------------------------
# Issue 1084: ra_svn move/copy bug
def copy_to_root(sbox):
'copy item to root of repository'
sbox.build()
root = svntest.main.current_repo_url
mu = root + '/A/mu'
svntest.actions.run_and_verify_svn(None, None, [], 'cp',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'-m', '',
mu, root)
#----------------------------------------------------------------------
def url_copy_parent_into_child(sbox):
"copy URL URL/subdir"
sbox.build()
wc_dir = sbox.wc_dir
B_url = svntest.main.current_repo_url + "/A/B"
F_url = svntest.main.current_repo_url + "/A/B/F"
# Issue 1367 parent/child URL-to-URL was rejected.
svntest.actions.run_and_verify_svn(None,
['\n', 'Committed revision 2.\n'], [],
'cp',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'-m', 'a can of worms',
B_url, F_url)
# Do an update to verify the copy worked
expected_output = svntest.wc.State(wc_dir, {
'A/B/F/B' : Item(status='A '),
'A/B/F/B/E' : Item(status='A '),
'A/B/F/B/E/alpha' : Item(status='A '),
'A/B/F/B/E/beta' : Item(status='A '),
'A/B/F/B/F' : Item(status='A '),
'A/B/F/B/lambda' : Item(status='A '),
})
expected_disk = svntest.main.greek_state.copy()
expected_disk.add({
'A/B/F/B' : Item(),
'A/B/F/B/E' : Item(),
'A/B/F/B/E/alpha' : Item("This is the file 'alpha'."),
'A/B/F/B/E/beta' : Item("This is the file 'beta'."),
'A/B/F/B/F' : Item(),
'A/B/F/B/lambda' : Item("This is the file 'lambda'."),
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 2)
expected_status.add({
'A/B/F/B' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/F/B/E' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/F/B/E/alpha' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/F/B/E/beta' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/F/B/F' : Item(status=' ', wc_rev=2, repos_rev=2),
'A/B/F/B/lambda' : Item(status=' ', wc_rev=2, repos_rev=2),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
#----------------------------------------------------------------------
def wc_copy_parent_into_child(sbox):
"copy WC URL/subdir"
sbox.build()
wc_dir = sbox.wc_dir
B_url = svntest.main.current_repo_url + "/A/B"
F_B_url = svntest.main.current_repo_url + "/A/B/F/B"
# Want a smaller WC
svntest.main.safe_rmtree(wc_dir)
svntest.actions.run_and_verify_svn(None, None, [],
'checkout',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
B_url, wc_dir)
# Issue 1367: A) copying '.' to URL failed with a parent/child
# error, and also B) copying root of a working copy attempted to
# lock the non-working copy parent directory.
was_cwd = os.getcwd()
os.chdir(sbox.wc_dir)
try:
svntest.actions.run_and_verify_svn(None,
['\n', 'Committed revision 2.\n'], [],
'cp',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
'-m', 'a larger can',
'.', F_B_url)
finally:
os.chdir(was_cwd)
# Do an update to verify the copy worked
expected_output = svntest.wc.State(wc_dir, {
'F/B' : Item(status='A '),
'F/B/E' : Item(status='A '),
'F/B/E/alpha' : Item(status='A '),
'F/B/E/beta' : Item(status='A '),
'F/B/F' : Item(status='A '),
'F/B/lambda' : Item(status='A '),
})
expected_disk = svntest.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'."),
'F/B' : Item(),
'F/B/E' : Item(),
'F/B/E/alpha' : Item("This is the file 'alpha'."),
'F/B/E/beta' : Item("This is the file 'beta'."),
'F/B/F' : Item(),
'F/B/lambda' : Item("This is the file 'lambda'."),
})
expected_status = svntest.wc.State(wc_dir, {
'' : Item(status=' ', wc_rev=2, repos_rev=2),
'E' : Item(status=' ', wc_rev=2, repos_rev=2),
'E/alpha' : Item(status=' ', wc_rev=2, repos_rev=2),
'E/beta' : Item(status=' ', wc_rev=2, repos_rev=2),
'F' : Item(status=' ', wc_rev=2, repos_rev=2),
'lambda' : Item(status=' ', wc_rev=2, repos_rev=2),
'F/B' : Item(status=' ', wc_rev=2, repos_rev=2),
'F/B/E' : Item(status=' ', wc_rev=2, repos_rev=2),
'F/B/E/alpha' : Item(status=' ', wc_rev=2, repos_rev=2),
'F/B/E/beta' : Item(status=' ', wc_rev=2, repos_rev=2),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -