import os
import svntest
from svntest import wc
Skip = svntest.testcase.Skip_deco
SkipUnless = svntest.testcase.SkipUnless_deco
XFail = svntest.testcase.XFail_deco
Issues = svntest.testcase.Issues_deco
Issue = svntest.testcase.Issue_deco
Wimp = svntest.testcase.Wimp_deco
Item = wc.StateItem
def cat_traces_renames(sbox):
"verify that 'svn cat' traces renames"
sbox.build()
wc_dir = sbox.wc_dir
rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')
pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi')
bloo_path = os.path.join(wc_dir, 'A', 'D', 'G', 'bloo')
svntest.main.run_svn(None, 'mv', rho_path, bloo_path)
expected_output = svntest.wc.State(wc_dir, {
'A/D/G/rho' : Item(verb='Deleting'),
'A/D/G/bloo' : Item(verb='Adding')
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.remove('A/D/G/rho');
expected_status.add({ 'A/D/G/bloo' :
Item(wc_rev=2, status=' ') })
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
None,
wc_dir)
svntest.main.run_svn(None, 'mv', pi_path, rho_path)
svntest.actions.run_and_verify_svn(None,
[ "This is the file 'pi'.\n"], [],
'cat', '-r', '1', rho_path)
expected_output = svntest.wc.State(wc_dir, {
'A/D/G/pi' : Item(verb='Deleting'),
'A/D/G/rho' : Item(verb='Adding')
})
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
expected_status.remove('A/D/G/pi');
expected_status.tweak('A/D/G/rho', wc_rev=3)
expected_status.add({ 'A/D/G/bloo' :
Item(wc_rev=2, status=' ') })
svntest.actions.run_and_verify_commit(wc_dir,
expected_output,
expected_status,
None,
wc_dir)
expected_output = svntest.wc.State(wc_dir, { }) expected_status.tweak(wc_rev=3)
expected_disk = svntest.main.greek_state.copy()
expected_disk.remove('A/D/G/pi', 'A/D/G/rho')
expected_disk.add({
'A/D/G/rho' : Item("This is the file 'pi'.\n"),
})
expected_disk.add({
'A/D/G/bloo' : Item("This is the file 'rho'.\n"),
})
svntest.actions.run_and_verify_update(wc_dir,
expected_output,
expected_disk,
expected_status)
svntest.actions.run_and_verify_svn(None,
[ "This is the file 'rho'.\n"], [],
'cat', bloo_path)
svntest.actions.run_and_verify_svn(None,
[ "This is the file 'rho'.\n"], [],
'cat', '-r', '1', bloo_path)
svntest.actions.run_and_verify_svn(None,
[ "This is the file 'pi'.\n"], [],
'cat', '-r', '1', rho_path)
svntest.actions.run_and_verify_svn(None, None, [], 'up', '-r', '1', wc_dir)
expected_status = svntest.actions.get_virginal_state(wc_dir, 1)
svntest.actions.run_and_verify_status(wc_dir, expected_status)
svntest.actions.run_and_verify_svn("unrelated object",
None, svntest.verify.AnyOutput,
'cat', '-r', 'HEAD', rho_path)
@Issue(1970)
def cat_avoids_false_identities(sbox):
"verify that 'svn cat' avoids false identities"
sbox.build()
wc_dir = sbox.wc_dir
iota_path = os.path.join(wc_dir, 'iota')
iota_url = sbox.repo_url + '/iota'
svntest.main.run_svn(None, 'del', iota_path)
svntest.main.file_append(iota_path, "YOU SHOULD NOT SEE THIS\n")
svntest.main.run_svn(None, 'add', iota_path)
svntest.main.run_svn(None, 'ci', '-m', 'log msg',
wc_dir)
svntest.main.run_svn(None, 'up', wc_dir)
svntest.main.run_svn(None, 'del', iota_path)
svntest.main.run_svn(None, 'ci', '-m', 'log msg',
wc_dir)
svntest.main.run_svn(None, 'up', wc_dir)
svntest.main.run_svn(None, 'cp', iota_url + '@1', wc_dir)
svntest.main.run_svn(None, 'ci', '-m', 'log msg',
wc_dir)
svntest.main.run_svn(None, 'up', wc_dir)
svntest.actions.run_and_verify_svn(None, None, svntest.verify.AnyOutput,
'cat', '-r', '2', iota_path)
test_list = [ None,
cat_traces_renames,
cat_avoids_false_identities,
]
if __name__ == '__main__':
svntest.main.run_tests(test_list)