📄 log_tests.py
字号:
# try to check in a change using a versioned file as your log entry. svntest.actions.run_and_verify_svn("", None, SVNAnyOutput, 'ci', '-F', log_path) # force it. should not produce any errors. svntest.actions.run_and_verify_svn ("", None, [], 'ci', '-F', log_path, '--force-log') svntest.main.file_append (mu_path, "2") # try the same thing, but specifying the file to commit explicitly. svntest.actions.run_and_verify_svn("", None, SVNAnyOutput, 'ci', '-F', log_path, mu_path) # force it... should succeed. svntest.actions.run_and_verify_svn ("", None, [], 'ci', '-F', log_path, '--force-log', mu_path) finally: os.chdir (was_cwd)#----------------------------------------------------------------------def log_with_empty_repos(sbox): "'svn log' on an empty repository" # Create virgin repos svntest.main.safe_rmtree(sbox.repo_dir, 1) svntest.main.create_repos(sbox.repo_dir) svntest.main.set_repos_paths(sbox.repo_dir) svntest.actions.run_and_verify_svn ("", None, [], 'log', '--username', svntest.main.wc_author, '--password', svntest.main.wc_passwd, svntest.main.current_repo_url)#----------------------------------------------------------------------def log_where_nothing_changed(sbox): "'svn log -rN some_dir_unchanged_in_N'" sbox.build() # Fix bug whereby running 'svn log -rN SOMEPATH' would result in an # xml protocol error if there were no changes in revision N # underneath SOMEPATH. This problem was introduced in revision # 3811, which didn't cover the case where svn_repos_get_logs might # invoke log_receiver zero times. Since the receiver never ran, the # lrb->needs_header flag never got cleared. Control would proceed # without error to the end of dav_svn__log_report(), which would # send a closing tag even though no opening tag had ever been sent. rho_path = os.path.join (sbox.wc_dir, 'A', 'D', 'G', 'rho') svntest.main.file_append (rho_path, "some new material in rho") svntest.actions.run_and_verify_svn(None, None, [], 'ci', '-m', 'log msg', rho_path) # Now run 'svn log -r2' on a directory unaffected by revision 2. H_path = os.path.join (sbox.wc_dir, 'A', 'D', 'H') svntest.actions.run_and_verify_svn(None, None, [], 'log', '-r', '2', H_path)#----------------------------------------------------------------------def log_to_revision_zero(sbox): "'svn log -v -r 1:0 wc_root'" sbox.build() # This used to segfault the server. svntest.actions.run_and_verify_svn(None, None, [], 'log', '-v', '-r', '1:0', sbox.wc_dir)#----------------------------------------------------------------------def log_with_path_args(sbox): "'svn log', with args, top of wc" guarantee_repos_and_wc(sbox) was_cwd = os.getcwd() os.chdir(sbox.wc_dir) try: output, err = svntest.actions.run_and_verify_svn( None, None, [], 'log', svntest.main.current_repo_url, 'A/D/G', 'A/D/H') log_chain = parse_log_output (output) check_log_chain(log_chain, [8, 6, 5, 3, 1]) finally: os.chdir (was_cwd)#----------------------------------------------------------------------def dynamic_revision(sbox): "'svn log -r COMMITTED' of dynamic/local WC rev" guarantee_repos_and_wc(sbox) was_cwd = os.getcwd() os.chdir(sbox.wc_dir) try: for rev in ('HEAD', 'BASE', 'COMMITTED', 'PREV'): svntest.actions.run_and_verify_svn(None, None, [], 'log', '-r', rev) finally: os.chdir(was_cwd)#----------------------------------------------------------------------def log_wc_with_peg_revision(sbox): "'svn log wc_target@N'" guarantee_repos_and_wc(sbox) my_path = os.path.join(sbox.wc_dir, "A", "B", "E", "beta") + "@8" output, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', my_path) check_log_chain(parse_log_output(output), [1])#----------------------------------------------------------------------def url_missing_in_head(sbox): "'svn log target@N' when target removed from HEAD" guarantee_repos_and_wc(sbox) my_url = svntest.main.current_repo_url + "/A/B/E/alpha" + "@8" output, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', my_url) check_log_chain(parse_log_output(output), [3, 1])#----------------------------------------------------------------------def log_through_copyfrom_history(sbox): "'svn log TGT' with copyfrom history" sbox.build() wc_dir = sbox.wc_dir msg_file=os.path.join (sbox.repo_dir, 'log-msg') msg_file=os.path.abspath (msg_file) mu_path = os.path.join (wc_dir, 'A', 'mu') mu2_path = os.path.join (wc_dir, 'A', 'mu2') mu_URL = svntest.main.current_repo_url + '/A/mu' mu2_URL = svntest.main.current_repo_url + '/A/mu2' msg2=""" Log message for revision 2 but with multiple lines to test the code""" msg4=""" Log message for revision 4 but with multiple lines to test the code""" msg6=""" Log message for revision 6 but with multiple lines to test the code""" log_file=open (msg_file, 'w') log_file.write (msg2) log_file.close () svntest.main.file_append (mu_path, "2") svntest.actions.run_and_verify_svn (None, None, [], 'ci', wc_dir, '-F', msg_file) svntest.main.file_append (mu2_path, "this is mu2") svntest.actions.run_and_verify_svn (None, None, [], 'add', mu2_path) svntest.actions.run_and_verify_svn (None, None, [], 'ci', wc_dir, '-m', "Log message for revision 3") svntest.actions.run_and_verify_svn (None, None, [], 'rm', mu2_path) log_file=open (msg_file, 'w') log_file.write (msg4) log_file.close () svntest.actions.run_and_verify_svn (None, None, [], 'ci', wc_dir, '-F', msg_file) svntest.main.file_append (mu_path, "5") svntest.actions.run_and_verify_svn (None, None, [], 'ci', wc_dir, '-m', "Log message for revision 5") log_file=open (msg_file, 'w') log_file.write (msg6) log_file.close () svntest.actions.run_and_verify_svn (None, None, [], 'cp', '-r', '5', mu_URL, mu2_URL, '-F', msg_file) svntest.actions.run_and_verify_svn (None, None, [], 'up', wc_dir) # The full log for mu2 is relatively unsurprising output, err = svntest.actions.run_and_verify_svn (None, None, [], 'log', mu2_path) log_chain = parse_log_output (output) check_log_chain(log_chain, [6, 5, 2, 1]) output, err = svntest.actions.run_and_verify_svn (None, None, [], 'log', mu2_URL) log_chain = parse_log_output (output) check_log_chain(log_chain, [6, 5, 2, 1]) # First "oddity", the full log for mu2 doesn't include r3, but the -r3 # log works! peg_mu2_path = mu2_path + "@3" output, err = svntest.actions.run_and_verify_svn (None, None, [], 'log', '-r', '3', peg_mu2_path) log_chain = parse_log_output (output) check_log_chain(log_chain, [3]) peg_mu2_URL = mu2_URL + "@3" output, err = svntest.actions.run_and_verify_svn (None, None, [], 'log', '-r', '3', peg_mu2_URL) log_chain = parse_log_output (output) check_log_chain(log_chain, [3]) output, err = svntest.actions.run_and_verify_svn (None, None, [], 'log', '-r', '2', mu2_path) log_chain = parse_log_output (output) check_log_chain (log_chain, [2]) output, err = svntest.actions.run_and_verify_svn (None, None, [], 'log', '-r', '2', mu2_URL) log_chain = parse_log_output (output) check_log_chain(log_chain, [2])#----------------------------------------------------------------------def escape_control_chars(sbox): "mod_dav_svn must escape invalid XML control chars" dump_str = """SVN-fs-dump-format-version: 2UUID: ffcae364-69ee-0310-a980-ca5f10462af2Revision-number: 0Prop-content-length: 56Content-length: 56K 8svn:dateV 272005-01-24T10:09:21.759592ZPROPS-ENDRevision-number: 1Prop-content-length: 128Content-length: 128K 7svn:logV 100This msg contains a Ctrl-T (\x14) and a Ctrl-I (\t).The former might be escaped, but the latter never.K 10svn:authorV 7jrandomK 8svn:dateV 272005-01-24T10:09:22.012524ZPROPS-END""" # Create virgin repos and working copy svntest.main.safe_rmtree(sbox.repo_dir, 1) svntest.main.create_repos(sbox.repo_dir) svntest.main.set_repos_paths(sbox.repo_dir) URL = svntest.main.current_repo_url # load dumpfile with control character into repos to get # a log with control char content output, errput = \ svntest.main.run_command_stdin( "%s load --quiet %s" % (svntest.main.svnadmin_binary, sbox.repo_dir), None, 1, dump_str) # run log output, errput = svntest.actions.run_and_verify_svn ("", None, [], 'log', URL) # Verify the output contains either the expected fuzzy escape # sequence, or the literal control char. match_unescaped_ctrl_re = "This msg contains a Ctrl-T \(.\) " \ "and a Ctrl-I \(\t\)\." match_escaped_ctrl_re = "^This msg contains a Ctrl-T \(\?\\\\020\) " \ "and a Ctrl-I \(\t\)\." matched = None for line in output: if re.match (match_unescaped_ctrl_re, line) \ or re.match (match_escaped_ctrl_re, line): matched = 1 if not matched: raise svntest.Failure ("log message not transmitted properly:" + str(output) + "\n" + "error: " + str(errput))#----------------------------------------------------------------------def log_xml_empty_date(sbox): "svn log --xml must not print empty date elements" sbox.build() # Create the revprop-change hook for this test svntest.actions.enable_revprop_changes(svntest.main.current_repo_dir) date_re = re.compile('<date'); # Ensure that we get a date before we delete the property. output, errput = svntest.actions.run_and_verify_svn("", None, [], 'log', '--xml', '-r1', sbox.wc_dir) matched = 0 for line in output: if date_re.search(line): matched = 1 if not matched: raise svntest.Failure ("log contains no date element") # Set the svn:date revprop to the empty string on revision 1. svntest.actions.run_and_verify_svn("", None, [], 'pdel', '--revprop', '-r1', 'svn:date', sbox.wc_dir) output, errput = svntest.actions.run_and_verify_svn("", None, [], 'log', '--xml', '-r1', sbox.wc_dir) for line in output: if date_re.search(line): raise svntest.Failure ("log contains date element when svn:date is empty")#----------------------------------------------------------------------def log_limit(sbox): "svn log --limit" guarantee_repos_and_wc(sbox) out, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', '--limit', '2', svntest.main.current_repo_url) log_chain = parse_log_output (out) check_log_chain(log_chain, [9, 8]) out, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', '--limit', '2', svntest.main.current_repo_url, 'A/B') log_chain = parse_log_output (out) check_log_chain(log_chain, [9, 6]) out, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', '--limit', '2', '--revision', '2:HEAD', svntest.main.current_repo_url, 'A/B') log_chain = parse_log_output (out) check_log_chain(log_chain, [3, 6]) out, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', '--limit', '2', '--revision', '1', svntest.main.current_repo_url, 'A/B') log_chain = parse_log_output (out) check_log_chain(log_chain, [1]) must_be_positive = ".*Argument to --limit must be positive.*" # error expected when limit <= 0 svntest.actions.run_and_verify_svn(None, None, must_be_positive, 'log', '--limit', '0', '--revision', '1', svntest.main.current_repo_url, 'A/B') svntest.actions.run_and_verify_svn(None, None, must_be_positive, 'log', '--limit', '-1', '--revision', '1', svntest.main.current_repo_url, 'A/B') def log_base_peg(sbox): "run log on an @BASE target" guarantee_repos_and_wc(sbox) target = os.path.join(sbox.wc_dir, 'A', 'B', 'E', 'beta') + '@BASE' out, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', target) log_chain = parse_log_output(out) check_log_chain(log_chain, [9, 1]) svntest.actions.run_and_verify_svn(None, None, [], 'update', '-r', '1', sbox.wc_dir) out, err = svntest.actions.run_and_verify_svn(None, None, [], 'log', target) log_chain = parse_log_output(out) check_log_chain(log_chain, [1])######################################################################### Run the tests# list all tests here, starting with None:test_list = [ None, plain_log, versioned_log_message, log_with_empty_repos, log_where_nothing_changed, log_to_revision_zero, dynamic_revision, log_with_path_args, log_wc_with_peg_revision, url_missing_in_head, log_through_copyfrom_history, escape_control_chars, log_xml_empty_date, log_limit, log_base_peg, ]if __name__ == '__main__': svntest.main.run_tests(test_list) # NOTREACHED### End of file.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -