📄 externals_tests.py
字号:
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
repo_url, wc_dir)
svntest.actions.run_and_verify_svn("", None, [],
'checkout',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
other_repo_url, other_wc_dir)
# Commit some modifications from the other_wc.
other_gamma_path = os.path.join(other_wc_dir, 'A', 'D', 'gamma')
svntest.main.file_append(other_gamma_path, "\nNew text in other gamma.")
expected_output = svntest.wc.State(other_wc_dir, {
'A/D/gamma' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(other_wc_dir, 5)
expected_status.tweak(repos_rev=6)
expected_status.tweak('A/D/gamma', wc_rev=6)
svntest.actions.run_and_verify_commit(other_wc_dir,
expected_output,
expected_status,
None, None, None, None, None,
other_wc_dir)
# Now update the regular wc to see if we get the change. Note that
# none of the module *properties* in this wc have been changed; only
# the source repository of the modules has received a change, and
# we're verifying that an update here pulls that change.
# The output's going to be all screwy because of the module
# notifications, so don't bother parsing it, just run update
# directly.
svntest.actions.run_and_verify_svn("", None, [], 'up', wc_dir)
external_gamma_path = os.path.join(wc_dir, 'A', 'D', 'exdir_A', 'D', 'gamma')
fp = open(external_gamma_path, 'r')
lines = fp.readlines()
if not ((len(lines) == 2)
and (lines[0] == "This is the file 'gamma'.\n")
and (lines[1] == "New text in other gamma.")):
raise svntest.Failure("Unexpected contents for externally modified " +
external_gamma_path)
fp.close()
# Commit more modifications
other_rho_path = os.path.join(other_wc_dir, 'A', 'D', 'G', 'rho')
svntest.main.file_append(other_rho_path, "\nNew text in other rho.")
expected_output = svntest.wc.State(other_wc_dir, {
'A/D/G/rho' : Item(verb='Sending'),
})
expected_status = svntest.actions.get_virginal_state(other_wc_dir, 5)
expected_status.tweak(repos_rev=7)
expected_status.tweak('A/D/gamma', wc_rev=6)
expected_status.tweak('A/D/G/rho', wc_rev=7)
svntest.actions.run_and_verify_commit(other_wc_dir,
expected_output,
expected_status,
None, None, None, None, None,
other_wc_dir)
svntest.actions.run_and_verify_svn("", None, [],
'up', os.path.join(wc_dir, "A", "C"))
external_rho_path = os.path.join(wc_dir, 'A', 'C', 'exdir_G', 'rho')
fp = open(external_rho_path, 'r')
lines = fp.readlines()
if not ((len(lines) == 2)
and (lines[0] == "This is the file 'rho'.\n")
and (lines[1] == "New text in other rho.")):
raise svntest.Failure("Unexpected contents for externally modified " +
external_rho_path)
fp.close()
#----------------------------------------------------------------------
def modify_and_update_receive_new_external(sbox):
"commit and update additional externals"
externals_test_setup(sbox)
wc_dir = sbox.wc_dir
repo_dir = sbox.repo_dir
repo_url = sbox.repo_url
other_repo_url = repo_url + ".other"
# Checkout a working copy
svntest.actions.run_and_verify_svn("", None, [],
'checkout',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
repo_url, wc_dir)
# Add one more external item
B_path = os.path.join(wc_dir, "A/B")
externals_desc = \
"exdir_G " + other_repo_url + "/A/D/G" + "\n" + \
"exdir_H -r 1 " + other_repo_url + "/A/D/H" + "\n" + \
"exdir_Z " + other_repo_url + "/A/D/H" + "\n"
tmp_f = os.tempnam()
svntest.main.file_append(tmp_f, externals_desc)
svntest.actions.run_and_verify_svn("", None, [],
'pset', '-F', tmp_f,
'svn:externals', B_path)
os.remove(tmp_f)
# Now cd into A/B and try updating
was_cwd = os.getcwd()
os.chdir(B_path)
try:
# Once upon a time there was a core-dump here
svntest.actions.run_and_verify_svn("update failed",
SVNAnyOutput, [], 'up' )
finally:
os.chdir(was_cwd)
exdir_Z_path = os.path.join(B_path, "exdir_Z")
if not os.path.exists(exdir_Z_path):
raise svntest.Failure("Probing for " + exdir_Z_path + " failed.")
#----------------------------------------------------------------------
def disallow_dot_or_dotdot_directory_reference(sbox):
"error if external target dir involves '.' or '..'"
sbox.build()
wc_dir = sbox.wc_dir
repo_url = sbox.repo_url
# Try to set illegal externals in the original WC.
def set_externals_for_path_expect_error(path, val, dir):
tmp_f = os.tempnam(dir, 'tmp')
svntest.main.file_append(tmp_f, val)
svntest.actions.run_and_verify_svn("", None, SVNAnyOutput,
'pset', '-F', tmp_f,
'svn:externals', path)
os.remove(tmp_f)
B_path = os.path.join(wc_dir, 'A', 'B')
G_path = os.path.join(wc_dir, 'A', 'D', 'G')
H_path = os.path.join(wc_dir, 'A', 'D', 'H')
C_path = os.path.join(wc_dir, 'A', 'C')
F_path = os.path.join(wc_dir, 'A', 'C', 'F')
externals_value_1 = "../foo" + " " + repo_url + "/A/B/E" + "\n"
externals_value_2 = "foo/bar/../baz" + " " + repo_url + "/A/B/E" + "\n"
externals_value_3 = "foo/.." + " " + repo_url + "/A/B/E" + "\n"
externals_value_4 = "." + " " + repo_url + "/A/B/E" + "\n"
externals_value_5 = "./" + " " + repo_url + "/A/B/E" + "\n"
externals_value_6 = ".." + " " + repo_url + "/A/B/E" + "\n"
externals_value_7 = "././/.///." + " " + repo_url + "/A/B/E" + "\n"
externals_value_8 = "/foo" + " " + repo_url + "/A/B/E" + "\n"
set_externals_for_path_expect_error(B_path, externals_value_1, wc_dir)
set_externals_for_path_expect_error(G_path, externals_value_2, wc_dir)
set_externals_for_path_expect_error(H_path, externals_value_3, wc_dir)
set_externals_for_path_expect_error(C_path, externals_value_4, wc_dir)
set_externals_for_path_expect_error(F_path, externals_value_5, wc_dir)
set_externals_for_path_expect_error(B_path, externals_value_6, wc_dir)
set_externals_for_path_expect_error(G_path, externals_value_7, wc_dir)
set_externals_for_path_expect_error(H_path, externals_value_8, wc_dir)
#----------------------------------------------------------------------
def export_with_externals(sbox):
"test exports with externals"
externals_test_setup(sbox)
wc_dir = sbox.wc_dir
repo_dir = sbox.repo_dir
repo_url = sbox.repo_url
# Create a working copy.
svntest.actions.run_and_verify_svn("", None, [],
'export',
'--username', svntest.main.wc_author,
'--password', svntest.main.wc_passwd,
repo_url, wc_dir)
# Probe the working copy a bit, see if it's as expected.
exdir_G_path = os.path.join(wc_dir, "A", "C", "exdir_G")
exdir_G_pi_path = os.path.join(exdir_G_path, "pi")
exdir_H_path = os.path.join(wc_dir, "A", "C", "exdir_H")
exdir_H_omega_path = os.path.join(exdir_H_path, "omega")
x_path = os.path.join(wc_dir, "A", "D", "x")
y_path = os.path.join(x_path, "y")
z_path = os.path.join(y_path, "z")
blah_path = os.path.join(z_path, "blah")
alpha_path = os.path.join(blah_path, "E", "alpha")
beta_path = os.path.join(blah_path, "E", "beta")
if (not os.path.exists(exdir_G_path)):
raise svntest.Failure("Probing for " + exdir_G_path + " failed.")
if (not os.path.exists(exdir_G_pi_path)):
raise svntest.Failure("Probing for " + exdir_G_pi_path + " failed.")
if (not os.path.exists(exdir_H_path)):
raise svntest.Failure("Probing for " + exdir_H_path + " failed.")
if (not os.path.exists(exdir_H_omega_path)):
raise svntest.Failure("Probing for " + exdir_H_omega_path + " failed.")
if (not os.path.exists(x_path)):
raise svntest.Failure("Probing for " + x_path + " failed.")
if (not os.path.exists(y_path)):
raise svntest.Failure("Probing for " + y_path + " failed.")
if (not os.path.exists(z_path)):
raise svntest.Failure("Probing for " + z_path + " failed.")
if (not os.path.exists(z_path)):
raise svntest.Failure("Probing for " + z_path + " failed.")
if (not os.path.exists(alpha_path)):
raise svntest.Failure("Probing for " + alpha_path + " failed.")
if (not os.path.exists(beta_path)):
raise svntest.Failure("Probing for " + beta_path + " failed.")
# Pick some files, make sure their contents are as expected.
fp = open(exdir_G_pi_path, 'r')
lines = fp.readlines()
if not ((len(lines) == 2) \
and (lines[0] == "This is the file 'pi'.\n") \
and (lines[1] == "Added to pi in revision 3.\n")):
raise svntest.Failure("Unexpected contents for rev 1 of " +
exdir_G_pi_path)
fp = open(exdir_H_omega_path, 'r')
lines = fp.readlines()
if not ((len(lines) == 1) and (lines[0] == "This is the file 'omega'.")):
raise svntest.Failure("Unexpected contents for rev 1 of " +
exdir_H_omega_path)
########################################################################
# Run the tests
# list all tests here, starting with None:
test_list = [ None,
checkout_with_externals,
update_receive_new_external,
update_lose_external,
update_change_pristine_external,
update_change_modified_external,
update_receive_change_under_external,
modify_and_update_receive_new_external,
disallow_dot_or_dotdot_directory_reference,
export_with_externals,
]
if __name__ == '__main__':
warnings.filterwarnings('ignore', 'tempnam', RuntimeWarning)
svntest.main.run_tests(test_list)
# NOTREACHED
### End of file.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -