📄 commit_tests.py
字号:
#!/usr/bin/env python## commit_tests.py: testing fancy commit cases.## Subversion is a tool for revision control. # See http://subversion.tigris.org for more information.# # ====================================================================# Copyright (c) 2000-2004 CollabNet. All rights reserved.## This software is licensed as described in the file COPYING, which# you should have received as part of this distribution. The terms# are also available at http://subversion.tigris.org/license-1.html.# If newer versions of this license are posted there, you may use a# newer version instead, at your option.######################################################################## General modulesimport string, sys, os, re# Our testing moduleimport svntestfrom svntest import SVNAnyOutput# (abbreviation)Skip = svntest.testcase.SkipXFail = svntest.testcase.XFailItem = svntest.wc.StateItem####################################################################### Utilities#def get_standard_state(wc_dir): """Return a status list reflecting the local mods made by make_standard_slew_of_changes().""" state = svntest.actions.get_virginal_state(wc_dir, 1) state.tweak('', status=' M') state.tweak('A/B/lambda', status='M ') state.tweak('A/B/E', 'A/D/H/chi', status='R ') state.tweak('A/B/E/alpha', 'A/B/E/beta', 'A/C', 'A/D/gamma', 'A/D/G/rho', status='D ') state.tweak('A/D', 'A/D/G/pi', status=' M') state.tweak('A/D/H/omega', status='MM') # New things state.add({ 'Q' : Item(status='A ', wc_rev=0), 'Q/floo' : Item(status='A ', wc_rev=0), 'A/D/H/gloo' : Item(status='A ', wc_rev=0), 'A/B/E/bloo' : Item(status='A ', wc_rev=0), }) return state def make_standard_slew_of_changes(wc_dir): """Make a specific set of local mods to WC_DIR. These will be used by every commit-test. Verify the 'svn status' output, return on success.""" # Cache current working directory, move into wc_dir was_cwd = os.getcwd() os.chdir(wc_dir) # Add a directory os.mkdir('Q') svntest.main.run_svn(None, 'add', 'Q') # Remove two directories svntest.main.run_svn(None, 'rm', os.path.join('A', 'B', 'E')) svntest.main.run_svn(None, 'rm', os.path.join('A', 'C')) # Replace one of the removed directories svntest.main.run_svn(None, 'add', os.path.join('A', 'B', 'E')) # Make property mods to two directories svntest.main.run_svn(None, 'propset', 'foo', 'bar', os.curdir) svntest.main.run_svn(None, 'propset', 'foo2', 'bar2', os.path.join('A', 'D')) # Add three files svntest.main.file_append(os.path.join('A', 'B', 'E', 'bloo'), "hi") svntest.main.file_append(os.path.join('A', 'D', 'H', 'gloo'), "hello") svntest.main.file_append(os.path.join('Q', 'floo'), "yo") svntest.main.run_svn(None, 'add', os.path.join('A', 'B', 'E', 'bloo')) svntest.main.run_svn(None, 'add', os.path.join('A', 'D', 'H', 'gloo')) svntest.main.run_svn(None, 'add', os.path.join('Q', 'floo')) # Remove three files svntest.main.run_svn(None, 'rm', os.path.join('A', 'D', 'G', 'rho')) svntest.main.run_svn(None, 'rm', os.path.join('A', 'D', 'H', 'chi')) svntest.main.run_svn(None, 'rm', os.path.join('A', 'D', 'gamma')) # Replace one of the removed files svntest.main.file_append(os.path.join('A', 'D', 'H', 'chi'), "chi") svntest.main.run_svn(None, 'add', os.path.join('A', 'D', 'H', 'chi')) # Make textual mods to two files svntest.main.file_append(os.path.join('A', 'B', 'lambda'), "new ltext") svntest.main.file_append(os.path.join('A', 'D', 'H', 'omega'), "new otext") # Make property mods to three files svntest.main.run_svn(None, 'propset', 'blue', 'azul', os.path.join('A', 'D', 'H', 'omega')) svntest.main.run_svn(None, 'propset', 'green', 'verde', os.path.join('Q', 'floo')) svntest.main.run_svn(None, 'propset', 'red', 'rojo', os.path.join('A', 'D', 'G', 'pi')) # Restore the CWD. os.chdir(was_cwd) # Build an expected status tree. expected_status = get_standard_state(wc_dir) # Verify status -- all local mods should be present. svntest.actions.run_and_verify_status(wc_dir, expected_status)####################################################################### Tests## Each test must return on success or raise on failure.#----------------------------------------------------------------------def commit_one_file(sbox): "commit one file" sbox.build() wc_dir = sbox.wc_dir # Make standard slew of changes to working copy. make_standard_slew_of_changes(wc_dir) omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega') # Create expected output tree. expected_output = svntest.wc.State(wc_dir, { 'A/D/H/omega' : Item(verb='Sending'), }) # Created expected status tree. expected_status = get_standard_state(wc_dir) # pre-commit status expected_status.tweak('A/D/H/omega', wc_rev=2, status=' ') # Commit the one file. svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, omega_path) #----------------------------------------------------------------------def commit_one_new_file(sbox): "commit one newly added file" sbox.build() wc_dir = sbox.wc_dir # Make standard slew of changes to working copy. make_standard_slew_of_changes(wc_dir) gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo') # Create expected output tree. expected_output = svntest.wc.State(wc_dir, { 'A/D/H/gloo' : Item(verb='Adding'), }) # Created expected status tree. expected_status = get_standard_state(wc_dir) # pre-commit status expected_status.tweak('A/D/H/gloo', wc_rev=2, status=' ') # Commit the one file. svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, gloo_path)#----------------------------------------------------------------------def commit_one_new_binary_file(sbox): "commit one newly added binary file" sbox.build() wc_dir = sbox.wc_dir # Make standard slew of changes to working copy. make_standard_slew_of_changes(wc_dir) gloo_path = os.path.join(wc_dir, 'A', 'D', 'H', 'gloo') svntest.main.run_svn(None, 'propset', 'svn:mime-type', 'application/octet-stream', gloo_path) # Create expected output tree. expected_output = svntest.wc.State(wc_dir, { 'A/D/H/gloo' : Item(verb='Adding (bin)'), }) # Created expected status tree. expected_status = get_standard_state(wc_dir) # pre-commit status expected_status.tweak('A/D/H/gloo', wc_rev=2, status=' ') # Commit the one file. svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, gloo_path)#----------------------------------------------------------------------def commit_multiple_targets(sbox): "commit multiple targets" sbox.build() wc_dir = sbox.wc_dir # This test will commit three targets: psi, B, and pi. In that order. # Make local mods to many files. AB_path = os.path.join(wc_dir, 'A', 'B') lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda') rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho') pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi') omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega') psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi') svntest.main.file_append (lambda_path, 'new appended text for lambda') svntest.main.file_append (rho_path, 'new appended text for rho') svntest.main.file_append (pi_path, 'new appended text for pi') svntest.main.file_append (omega_path, 'new appended text for omega') svntest.main.file_append (psi_path, 'new appended text for psi') # Just for kicks, add a property to A/D/G as well. We'll make sure # that it *doesn't* get committed. ADG_path = os.path.join(wc_dir, 'A', 'D', 'G') svntest.main.run_svn(None, 'propset', 'foo', 'bar', ADG_path) # Created expected output tree for 'svn ci'. We should see changes # only on these three targets, no others. expected_output = svntest.wc.State(wc_dir, { 'A/D/H/psi' : Item(verb='Sending'), 'A/B/lambda' : Item(verb='Sending'), 'A/D/G/pi' : Item(verb='Sending'), }) # Create expected status tree; all local revisions should be at 1, # but our three targets should be at 2. expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak(wc_rev=1) expected_status.tweak('A/D/H/psi', 'A/B/lambda', 'A/D/G/pi', wc_rev=2) # rho and omega should still display as locally modified: expected_status.tweak('A/D/G/rho', 'A/D/H/omega', status='M ') # A/D/G should still have a local property set, too. expected_status.tweak('A/D/G', status=' M') svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, psi_path, AB_path, pi_path)#----------------------------------------------------------------------def commit_multiple_targets_2(sbox): "commit multiple targets, 2nd variation" sbox.build() wc_dir = sbox.wc_dir # This test will commit three targets: psi, B, omega and pi. In that order. # Make local mods to many files. AB_path = os.path.join(wc_dir, 'A', 'B') lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda') rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho') pi_path = os.path.join(wc_dir, 'A', 'D', 'G', 'pi') omega_path = os.path.join(wc_dir, 'A', 'D', 'H', 'omega') psi_path = os.path.join(wc_dir, 'A', 'D', 'H', 'psi') svntest.main.file_append (lambda_path, 'new appended text for lambda') svntest.main.file_append (rho_path, 'new appended text for rho') svntest.main.file_append (pi_path, 'new appended text for pi') svntest.main.file_append (omega_path, 'new appended text for omega') svntest.main.file_append (psi_path, 'new appended text for psi') # Just for kicks, add a property to A/D/G as well. We'll make sure # that it *doesn't* get committed. ADG_path = os.path.join(wc_dir, 'A', 'D', 'G') svntest.main.run_svn(None, 'propset', 'foo', 'bar', ADG_path) # Created expected output tree for 'svn ci'. We should see changes # only on these three targets, no others. expected_output = svntest.wc.State(wc_dir, { 'A/D/H/psi' : Item(verb='Sending'), 'A/B/lambda' : Item(verb='Sending'), 'A/D/H/omega' : Item(verb='Sending'), 'A/D/G/pi' : Item(verb='Sending'), }) # Create expected status tree; all local revisions should be at 1, # but our four targets should be at 2. expected_status = svntest.actions.get_virginal_state(wc_dir, 2) expected_status.tweak(wc_rev=1) expected_status.tweak('A/D/H/psi', 'A/B/lambda', 'A/D/G/pi', 'A/D/H/omega', wc_rev=2) # rho should still display as locally modified: expected_status.tweak('A/D/G/rho', status='M ') # A/D/G should still have a local property set, too. expected_status.tweak('A/D/G', status=' M') svntest.actions.run_and_verify_commit (wc_dir, expected_output, expected_status, None, None, None, None, None, psi_path, AB_path, omega_path, pi_path)#----------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -