📄 externals_tests.py
字号:
svntest.actions.run_and_verify_svn("", None, [], 'checkout', '--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, "New text in other gamma.\n") 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('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.\n")): 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, "New text in other rho.\n") 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('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.\n")): 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'.\n")): 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 + -