📄 switch_tests.py
字号:
#----------------------------------------------------------------------def update_switched_things(sbox): "update switched wc things to HEAD" sbox.build() wc_dir = sbox.wc_dir # Setup some switched things (don't bother verifying) do_routine_switching(wc_dir, 0) # Copy wc_dir to a backup location wc_backup = sbox.add_wc_path('backup') svntest.actions.duplicate_dir(wc_dir, wc_backup) # Commit some stuff (don't bother verifying) commit_routine_switching(wc_backup, 0) # Some convenient path variables iota_path = os.path.join(wc_dir, 'iota') B_path = os.path.join(wc_dir, 'A', 'B') # Create expected output tree for an update of wc_backup. expected_output = svntest.wc.State(wc_dir, { 'iota' : Item(status='U '), 'A/B/pi' : Item(status='U '), 'A/B/Z' : Item(status='A '), 'A/B/Z/zeta' : Item(status='A '), }) # Create expected disk tree for the update expected_disk = get_routine_disk_state(wc_dir) expected_disk.tweak('iota', contents="This is the file 'gamma'.\napple") expected_disk.tweak('A/B/pi', contents="This is the file 'pi'.\nmelon") expected_disk.add({ 'A/B/Z' : Item(), 'A/B/Z/zeta' : Item("This is the file 'zeta'.\n"), }) # Create expected status tree for the update. expected_status = get_routine_status_state(wc_dir) expected_status.tweak('iota', 'A/B', switched='S') expected_status.tweak('A/B', 'A/B/pi', 'A/B/rho', 'A/B/tau', 'iota', wc_rev=2) expected_status.add({ 'A/B/Z' : Item(status=' ', wc_rev=2), 'A/B/Z/zeta' : Item(status=' ', wc_rev=2), }) svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, None, None, None, None, None, 0, B_path, iota_path)#----------------------------------------------------------------------def rev_update_switched_things(sbox): "reverse update switched wc things to an older rev" sbox.build() wc_dir = sbox.wc_dir # Setup some switched things (don't bother verifying) do_routine_switching(wc_dir, 0) # Commit some stuff (don't bother verifying) commit_routine_switching(wc_dir, 0) # Some convenient path variables iota_path = os.path.join(wc_dir, 'iota') B_path = os.path.join(wc_dir, 'A', 'B') # Update to HEAD (tested elsewhere) svntest.main.run_svn (None, 'up', wc_dir) # Now, reverse update, back to the pre-commit state. expected_output = svntest.wc.State(wc_dir, { 'iota' : Item(status='U '), 'A/B/pi' : Item(status='U '), 'A/B/Z' : Item(status='D '), }) # Create expected disk tree expected_disk = get_routine_disk_state(wc_dir) expected_disk.tweak('A/D/gamma', contents="This is the file 'gamma'.\napple") expected_disk.tweak('A/D/G/pi', contents="This is the file 'pi'.\nmelon") expected_disk.add({ 'A/D/G/Z' : Item(), 'A/D/G/Z/zeta' : Item("This is the file 'zeta'.\n"), }) # Create expected status tree for the update. expected_status = get_routine_status_state(wc_dir) expected_status.tweak(wc_rev=2) expected_status.tweak('iota', 'A/B', switched='S') expected_status.tweak('A/B', 'A/B/pi', 'A/B/rho', 'A/B/tau', 'iota', wc_rev=1) expected_status.add({ 'A/D/G/Z' : Item(status=' ', wc_rev=2), 'A/D/G/Z/zeta' : Item(status=' ', wc_rev=2), }) svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status, None, None, None, None, None, 1, '-r', '1', B_path, iota_path)#----------------------------------------------------------------------def log_switched_file(sbox): "show logs for a switched file" sbox.build() wc_dir = sbox.wc_dir # Setup some switched things (don't bother verifying) do_routine_switching(wc_dir, 0) # edit and commit switched file 'iota' iota_path = os.path.join(wc_dir, 'iota') svntest.main.run_svn (None, 'ps', 'x', 'x', iota_path) svntest.main.run_svn (None, 'ci', '-m', 'set prop on switched iota', iota_path) # log switched file 'iota' output, error = svntest.main.run_svn (None, 'log', iota_path) for line in output: if line.find("set prop on switched iota") != -1: break else: raise svntest.Failure#----------------------------------------------------------------------def relocate_deleted_missing_copied(sbox): "relocate with deleted, missing and copied entries" sbox.build() wc_dir = sbox.wc_dir # Delete A/mu to create a deleted entry for mu in A/.svn/entries mu_path = os.path.join(wc_dir, 'A', 'mu') svntest.actions.run_and_verify_svn(None, None, [], 'rm', mu_path) expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak(wc_rev=1) expected_status.remove('A/mu') expected_output = svntest.wc.State(wc_dir, { 'A/mu' : Item(verb='Deleting'), }) svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir) # Remove A/B/F to create a missing entry svntest.main.safe_rmtree(os.path.join(wc_dir, 'A', 'B', 'F')) # Copy A/D/H to A/D/H2 H_path = os.path.join(wc_dir, 'A', 'D', 'H') H2_path = os.path.join(wc_dir, 'A', 'D', 'H2') svntest.actions.run_and_verify_svn(None, None, [], 'copy', H_path, H2_path) expected_status.add({ 'A/D/H2' : Item(status='A ', wc_rev='-', copied='+'), 'A/D/H2/chi' : Item(status=' ', wc_rev='-', copied='+'), 'A/D/H2/omega' : Item(status=' ', wc_rev='-', copied='+'), 'A/D/H2/psi' : Item(status=' ', wc_rev='-', copied='+'), }) expected_status.tweak('A/B/F', status='! ', wc_rev='?') svntest.actions.run_and_verify_status(wc_dir, expected_status) # Relocate repo_dir = sbox.repo_dir repo_url = sbox.repo_url other_repo_dir, other_repo_url = sbox.add_repo_path('other') svntest.main.copy_repos(repo_dir, other_repo_dir, 2) svntest.main.safe_rmtree(repo_dir, 1) svntest.actions.run_and_verify_svn(None, None, [], 'switch', '--relocate', repo_url, other_repo_url, wc_dir) # Deleted and missing entries should be preserved, so update should # show only A/B/F being reinstated expected_output = svntest.wc.State(wc_dir, { 'A/B/F' : Item(status='A '), }) expected_disk = svntest.main.greek_state.copy() expected_disk.remove('A/mu') expected_disk.add({ 'A/D/H2' : Item(), 'A/D/H2/chi' : Item("This is the file 'chi'.\n"), 'A/D/H2/omega' : Item("This is the file 'omega'.\n"), 'A/D/H2/psi' : Item("This is the file 'psi'.\n"), }) expected_status.add({ 'A/B/F' : Item(status=' ', wc_rev='2'), }) expected_status.tweak(wc_rev=2) expected_status.tweak('A/D/H2', 'A/D/H2/chi', 'A/D/H2/omega', 'A/D/H2/psi', wc_rev='-') svntest.actions.run_and_verify_update(wc_dir, expected_output, expected_disk, expected_status) # Commit to verify that copyfrom URLs have been relocated expected_output = svntest.wc.State(wc_dir, { 'A/D/H2' : Item(verb='Adding'), 'A/D/H2/chi' : Item(verb='Adding'), 'A/D/H2/omega' : Item(verb='Adding'), 'A/D/H2/psi' : Item(verb='Adding'), }) expected_status.tweak('A/D/H2', 'A/D/H2/chi', 'A/D/H2/omega', 'A/D/H2/psi', status=' ', wc_rev='3', copied=None) svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, wc_dir)#----------------------------------------------------------------------def delete_subdir(sbox): "switch that deletes a sub-directory" sbox.build() wc_dir = sbox.wc_dir A_path = os.path.join(wc_dir, 'A') A_url = svntest.main.current_repo_url + '/A' A2_url = svntest.main.current_repo_url + '/A2' A2_B_F_url = svntest.main.current_repo_url + '/A2/B/F' svntest.actions.run_and_verify_svn(None, ['\n', 'Committed revision 2.\n'], [], 'cp', '-m', 'make copy', A_url, A2_url) svntest.actions.run_and_verify_svn(None, ['\n', 'Committed revision 3.\n'], [], 'rm', '-m', 'delete subdir', A2_B_F_url) expected_output = svntest.wc.State(wc_dir, { 'A/B/F' : Item(status='D '), }) expected_disk = svntest.main.greek_state.copy() expected_disk.remove('A/B/F') expected_status = svntest.actions.get_virginal_state(wc_dir, 3) expected_status.tweak('A', switched='S') expected_status.remove('A/B/F') expected_status.tweak('', 'iota', wc_rev=1) # Used to fail with a 'directory not locked' error for A/B/F svntest.actions.run_and_verify_switch(wc_dir, A_path, A2_url, expected_output, expected_disk, expected_status)#----------------------------------------------------------------------# Issue 1532: Switch a file to a dir: can't switch it back to the filedef file_dir_file(sbox): "switch a file to a dir and back to the file" sbox.build() wc_dir = sbox.wc_dir file_path = os.path.join(wc_dir, 'iota') file_url = svntest.main.current_repo_url + '/iota' dir_url = svntest.main.current_repo_url + '/A/C' svntest.actions.run_and_verify_svn(None, None, [], 'switch', dir_url, file_path) svntest.actions.run_and_verify_svn(None, None, [], 'switch', file_url, file_path)#----------------------------------------------------------------------# Issue 1751: "svn switch --non-recursive" does not switch existing files,# and generates the wrong URL for new files.def nonrecursive_switching(sbox): "non-recursive switch" sbox.build() wc1_dir = sbox.wc_dir wc2_dir = os.path.join(wc1_dir, 'wc2') # "Trunk" will be the existing dir "A/", with existing file "mu". # "Branch" will be the new dir "branch/version1/", with added file "newfile". # "wc1" will hold the whole repository (including trunk and branch). # "wc2" will hold the "trunk" and then be switched to the "branch". # It is irrelevant that wc2 is located on disk as a sub-directory of wc1. trunk_url = svntest.main.current_repo_url + '/A' branch_url = svntest.main.current_repo_url + '/branch' version1_url = branch_url + '/version1' wc1_new_file = os.path.join(wc1_dir, 'branch', 'version1', 'newfile') wc2_new_file = os.path.join(wc2_dir, 'newfile') wc2_mu_file = os.path.join(wc2_dir, 'mu') wc2_B_dir = os.path.join(wc2_dir, 'B') wc2_C_dir = os.path.join(wc2_dir, 'C') wc2_D_dir = os.path.join(wc2_dir, 'D') # Check out the trunk as "wc2" svntest.main.run_svn(None, 'co', trunk_url, wc2_dir) # Make a branch, and add a new file, in "wc_dir" and repository svntest.main.run_svn(None, 'mkdir', '-m', '', branch_url) svntest.main.run_svn(None, 'cp', '-m', '', trunk_url, version1_url) svntest.main.run_svn(None, 'up', wc1_dir) svntest.main.file_append(wc1_new_file, "This is the file 'newfile'.\n") svntest.main.run_svn(None, 'add', wc1_new_file) svntest.main.run_svn(None, 'ci', '-m', '', wc1_dir) # Try to switch "wc2" to the branch (non-recursively) svntest.actions.run_and_verify_svn(None, None, [], 'switch', '-N', version1_url, wc2_dir) # Check the URLs of the (not switched) directories. out, err = svntest.actions.run_and_verify_svn(None, None, [], 'info', wc2_B_dir) if out[1].find('/A/B') == -1: print out[1] raise svntest.Failure out, err = svntest.actions.run_and_verify_svn(None, None, [], 'info', wc2_C_dir) if out[1].find('/A/C') == -1: print out[1] raise svntest.Failure out, err = svntest.actions.run_and_verify_svn(None, None, [], 'info', wc2_D_dir) if out[1].find('/A/D') == -1: print out[1] raise svntest.Failure # Check the URLs of the switched files. # ("svn status -u" might be a better check: it fails when newfile's URL # is bad, and shows "S" when mu's URL is wrong.) # mu: not switched out, err = svntest.actions.run_and_verify_svn(None, None, [], 'info', wc2_mu_file) if out[2].find('/branch/version1/mu') == -1: print out[2] raise svntest.Failure # newfile: wrong URL out, err = svntest.actions.run_and_verify_svn(None, None, [], 'info', wc2_new_file) if out[2].find('/branch/version1/newfile') == -1: print out[2] raise svntest.Failure#----------------------------------------------------------------------def failed_anchor_is_target(sbox): "anchor=target that fails due to local mods" sbox.build() wc_dir = sbox.wc_dir
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -