import os, re
import svntest
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
redirect_regex = re.compile(r"^Redirecting to URL '.*'")
uuid_regex = re.compile(r"[a-fA-F0-9]{8}(-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}")
def verify_url(wc_path, url, wc_path_is_file=False):
name = os.path.basename(wc_path)
expected = {'Path' : re.escape(wc_path),
'URL' : url,
'Repository Root' : '.*',
'Revision' : '.*',
'Node Kind' : 'directory',
'Repository UUID' : uuid_regex,
}
if wc_path_is_file:
expected.update({'Name' : name,
'Node Kind' : 'file',
})
svntest.actions.run_and_verify_info([expected], wc_path)
@SkipUnless(svntest.main.is_ra_type_dav)
def temporary_redirect(sbox):
"temporary redirect should error out"
sbox.build(create_wc=False)
wc_dir = sbox.add_wc_path("my")
co_url = sbox.redirected_root_url(temporary=True)
exit_code, out, err = svntest.main.run_svn('.*moved temporarily.*',
'info', co_url)
exit_code, out, err = svntest.main.run_svn('.*moved temporarily.*',
'co', co_url, wc_dir)
exit_code, out, err = svntest.main.run_svn('.*moved temporarily.*',
'mkdir', '-m', 'MKDIR',
co_url + '/newdir')
exit_code, out, err = svntest.main.run_svn('.*moved temporarily.*',
'delete', '-m', 'DELETE',
co_url + '/iota')
@SkipUnless(svntest.main.is_ra_type_dav)
def redirected_checkout(sbox):
"redirected checkout"
sbox.build(create_wc=False)
wc_dir = sbox.add_wc_path("my")
co_url = sbox.redirected_root_url()
exit_code, out, err = svntest.main.run_svn(None, 'co', co_url, wc_dir)
if err:
raise svntest.Failure
if not redirect_regex.match(out[0]):
raise svntest.Failure
verify_url(wc_dir, sbox.repo_url)
@SkipUnless(svntest.main.is_ra_type_dav)
def redirected_update(sbox):
"redirected update"
sbox.build()
wc_dir = sbox.wc_dir
relocate_url = sbox.redirected_root_url()
svntest.actions.no_relocate_validation()
exit_code, out, err = svntest.main.run_svn(None, 'sw', '--relocate',
sbox.repo_url, relocate_url,
wc_dir)
svntest.actions.do_relocate_validation()
exit_code, out, err = svntest.main.run_svn(None, 'up', wc_dir)
if err:
raise svntest.Failure
if not re.match("^Updating '.*':", out[0]):
raise svntest.Failure
if not redirect_regex.match(out[1]):
raise svntest.Failure
verify_url(wc_dir, sbox.repo_url)
test_list = [ None,
temporary_redirect,
redirected_checkout,
redirected_update,
]
if __name__ == '__main__':
svntest.main.run_tests(test_list)