📄 commit_tests.py
字号:
svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # Now gamma should be marked as `deleted' under the hood. # Go ahead and re-add gamma, so that is *also* scheduled for addition. svntest.main.file_append(gamma_path, "added gamma") svntest.main.run_svn(None, 'add', gamma_path) # For sanity, examine status: it should show a revision 2 tree with # gamma scheduled for addition. expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak(wc_rev=1) expected_status.tweak('A/D/gamma', wc_rev=0, status='A ') svntest.actions.run_and_verify_status(wc_dir, expected_status) # Create expected commit output. expected_output = svntest.wc.State(wc_dir, { 'A/D/gamma' : Item(verb='Adding'), }) # After committing, status should show only gamma at revision 3. expected_status = svntest.actions.get_virginal_state(wc_dir, 3) expected_status.tweak(wc_rev=1) expected_status.tweak('A/D/gamma', wc_rev=3) svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir)#----------------------------------------------------------------------# Testing part 2 of the "Greg Hudson" problem.## In this test, we make sure that we're UNABLE to commit a propchange# on an out-of-date directory.def hudson_part_2(sbox): "hudson prob 2.0: prop commit on old dir fails" sbox.build() wc_dir = sbox.wc_dir # Remove gamma from the working copy. D_path = os.path.join(wc_dir, 'A', 'D') gamma_path = os.path.join(wc_dir, 'A', 'D', 'gamma') svntest.main.run_svn(None, 'rm', gamma_path) # Create expected commit output. expected_output = svntest.wc.State(wc_dir, { 'A/D/gamma' : Item(verb='Deleting'), }) # After committing, status should show no sign of gamma. expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak(wc_rev=1) expected_status.remove('A/D/gamma') # Commit the deletion of gamma and verify. svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # Now gamma should be marked as `deleted' under the hood, at # revision 2. Meanwhile, A/D is still lagging at revision 1. # Make a propchange on A/D svntest.main.run_svn(None, 'ps', 'foo', 'bar', D_path) # Commit and *expect* a repository Merge failure: svntest.actions.run_and_verify_commit (wc_dir, None, None, "[Oo]ut.of.date", None, None, None, None, wc_dir)#----------------------------------------------------------------------# Test a possible regression in our 'deleted' post-commit handling.## This test moves files from one subdir to another, commits, then# updates the empty directory. Nothing should be printed, assuming# all the moved files are properly marked as 'deleted' and reported to# the server.def hudson_part_2_1(sbox): "hudson prob 2.1: move files, update empty dir" sbox.build() wc_dir = sbox.wc_dir # Move all the files in H to G H_path = os.path.join(wc_dir, 'A', 'D', 'H') G_path = os.path.join(wc_dir, 'A', 'D', 'G') chi_path = os.path.join(H_path, 'chi') psi_path = os.path.join(H_path, 'psi') omega_path = os.path.join(H_path, 'omega') svntest.main.run_svn(None, 'mv', chi_path, G_path) svntest.main.run_svn(None, 'mv', psi_path, G_path) svntest.main.run_svn(None, 'mv', omega_path, G_path) # Create expected commit output. expected_output = svntest.wc.State(wc_dir, { 'A/D/H/chi' : Item(verb='Deleting'), 'A/D/H/omega' : Item(verb='Deleting'), 'A/D/H/psi' : Item(verb='Deleting'), 'A/D/G/chi' : Item(verb='Adding'), 'A/D/G/omega' : Item(verb='Adding'), 'A/D/G/psi' : Item(verb='Adding'), }) expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak(wc_rev=1) expected_status.remove('A/D/H/chi') expected_status.remove('A/D/H/omega') expected_status.remove('A/D/H/psi') expected_status.add({ 'A/D/G/chi' : Item(wc_rev=2, status=' ') }) expected_status.add({ 'A/D/G/omega' : Item(wc_rev=2, status=' ') }) expected_status.add({ 'A/D/G/psi' : Item(wc_rev=2, status=' ') }) svntest.actions.run_and_verify_commit(wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # Now, assuming all three files in H are marked as 'deleted', an # update of H should print absolutely nothing. expected_output = svntest.wc.State(wc_dir, { }) # Reuse expected_status expected_status.tweak(wc_rev=2) expected_disk = svntest.main.greek_state.copy() expected_disk.remove('A/D/H/chi', 'A/D/H/omega', 'A/D/H/psi') expected_disk.add({ 'A/D/G/chi' : Item("This is the file 'chi'.\n"), }) expected_disk.add({ 'A/D/G/omega' : Item("This is the file 'omega'.\n"), }) expected_disk.add({ 'A/D/G/psi' : Item("This is the file 'psi'.\n"), }) svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status) #----------------------------------------------------------------------def hook_test(sbox): "hook testing" sbox.build() # Get paths to the working copy and repository wc_dir = sbox.wc_dir repo_dir = sbox.repo_dir # Setup the hook configs to echo data back start_commit_hook = svntest.main.get_start_commit_hook_path (repo_dir) svntest.main.file_append (start_commit_hook, """#!/bin/sh echo $1""") os.chmod (start_commit_hook, 0755) pre_commit_hook = svntest.main.get_pre_commit_hook_path (repo_dir) svntest.main.file_append (pre_commit_hook, """#!/bin/sh echo $1 $2 """) os.chmod (pre_commit_hook, 0755) post_commit_hook = svntest.main.get_post_commit_hook_path (repo_dir) svntest.main.file_append (post_commit_hook, """#!/bin/sh echo $1 $2 """) os.chmod (post_commit_hook, 0755) # Modify iota just so there is something to commit. iota_path = os.path.join (wc_dir, "iota") svntest.main.file_append (iota_path, "More stuff in iota") # Now, commit and examine the output (we happen to know that the # filesystem will report an absolute path because that's the way the # filesystem is created by this test suite. abs_repo_dir = os.path.abspath (repo_dir) expected_output = [abs_repo_dir + "\n", abs_repo_dir + " 1\n", abs_repo_dir + " 2\n"] svntest.actions.run_and_verify_svn (None, expected_output, [], 'ci', '--quiet', '-m', 'log msg', wc_dir)#----------------------------------------------------------------------# Regression test for bug #469, whereby merge() was once reporting# erroneous conflicts due to Ancestor < Target < Source, in terms of# node-rev-id parentage.def merge_mixed_revisions(sbox): "commit mixed-rev wc (no erroneous merge error)" sbox.build() wc_dir = sbox.wc_dir # Make some convenient paths. iota_path = os.path.join(wc_dir, 'iota') H_path = os.path.join(wc_dir, 'A', 'D', 'H') chi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'chi') omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega') psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi') # Here's the reproduction formula, in 5 parts. # Hoo, what a buildup of state! # 1. echo "moo" >> iota; echo "moo" >> A/D/H/chi; svn ci svntest.main.file_append(iota_path, "moo") svntest.main.file_append(chi_path, "moo") expected_output = svntest.wc.State(wc_dir, { 'iota' : Item(verb='Sending'), 'A/D/H/chi' : Item(verb='Sending'), }) expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak(wc_rev=1) expected_status.tweak('iota', 'A/D/H/chi', wc_rev=2) svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # 2. svn up A/D/H expected_status = svntest.wc.State(wc_dir, { 'A/D/H' : Item(status=' ', wc_rev=2), 'A/D/H/chi' : Item(status=' ', wc_rev=2), 'A/D/H/omega' : Item(status=' ', wc_rev=2), 'A/D/H/psi' : Item(status=' ', wc_rev=2), }) expected_disk = svntest.wc.State('', { 'omega' : Item("This is the file 'omega'.\n"), 'chi' : Item("This is the file 'chi'.\nmoo"), 'psi' : Item("This is the file 'psi'.\n"), }) expected_output = svntest.wc.State(wc_dir, { }) svntest.actions.run_and_verify_update (H_path, expected_output, expected_disk, expected_status) # 3. echo "moo" >> iota; svn ci iota svntest.main.file_append(iota_path, "moo2") expected_output = svntest.wc.State(wc_dir, { 'iota' : Item(verb='Sending'), }) expected_status = svntest.actions.get_virginal_state(wc_dir, 3) expected_status.tweak(wc_rev=1) expected_status.tweak('A/D/H', 'A/D/H/omega', 'A/D/H/chi', 'A/D/H/psi', wc_rev=2) expected_status.tweak('iota', wc_rev=3) svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # 4. echo "moo" >> A/D/H/chi; svn ci A/D/H/chi svntest.main.file_append(chi_path, "moo3") expected_output = svntest.wc.State(wc_dir, { 'A/D/H/chi' : Item(verb='Sending'), }) expected_status = svntest.actions.get_virginal_state(wc_dir, 4) expected_status.tweak(wc_rev=1) expected_status.tweak('A/D/H/chi', wc_rev=4) expected_status.tweak('A/D/H', 'A/D/H/omega', 'A/D/H/psi', wc_rev=2) expected_status.tweak('iota', wc_rev=3) svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # 5. echo "moo" >> iota; svn ci iota svntest.main.file_append(iota_path, "moomoo") expected_output = svntest.wc.State(wc_dir, { 'iota' : Item(verb='Sending'), }) expected_status = svntest.actions.get_virginal_state(wc_dir, 5) expected_status.tweak(wc_rev=1) expected_status.tweak('A/D/H', 'A/D/H/omega', 'A/D/H/psi', wc_rev=2) expected_status.tweak('A/D/H/chi', wc_rev=4) expected_status.tweak('iota', wc_rev=5) svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # At this point, here is what our tree should look like: # _ 1 ( 5) working_copies/commit_tests-10 # _ 1 ( 5) working_copies/commit_tests-10/A # _ 1 ( 5) working_copies/commit_tests-10/A/B # _ 1 ( 5) working_copies/commit_tests-10/A/B/E # _ 1 ( 5) working_copies/commit_tests-10/A/B/E/alpha # _ 1 ( 5) working_copies/commit_tests-10/A/B/E/beta # _ 1 ( 5) working_copies/commit_tests-10/A/B/F # _ 1 ( 5) working_copies/commit_tests-10/A/B/lambda # _ 1 ( 5) working_copies/commit_tests-10/A/C # _ 1 ( 5) working_copies/commit_tests-10/A/D # _ 1 ( 5) working_copies/commit_tests-10/A/D/G # _ 1 ( 5) working_copies/commit_tests-10/A/D/G/pi # _ 1 ( 5) working_copies/commit_tests-10/A/D/G/rho # _ 1 ( 5) working_copies/commit_tests-10/A/D/G/tau # _ 2 ( 5) working_copies/commit_tests-10/A/D/H # _ 4 ( 5) working_copies/commit_tests-10/A/D/H/chi # _ 2 ( 5) working_copies/commit_tests-10/A/D/H/omega # _ 2 ( 5) working_copies/commit_tests-10/A/D/H/psi # _ 1 ( 5) working_copies/commit_tests-10/A/D/gamma # _ 1 ( 5) working_copies/commit_tests-10/A/mu # _ 5 ( 5) working_copies/commit_tests-10/iota
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -