⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basic_tests.py

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 PY
📖 第 1 页 / 共 5 页
字号:
#!/usr/bin/env python##  basic_tests.py:  testing working-copy interactions with ra_local##  Subversion is a tool for revision control. #  See http://subversion.tigris.org for more information.#    # ====================================================================# Copyright (c) 2000-2006 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 shutil, stat, string, sys, re, os.path# Our testing moduleimport svntestfrom svntest import wc, SVNAnyOutput# (abbreviation)Skip = svntest.testcase.SkipXFail = svntest.testcase.XFailItem = wc.StateItem#----------------------------------------------------------------------def expect_extra_files(node, extra_files):  """singleton handler for expected singletons"""  for pattern in extra_files:    mo = re.match(pattern, node.name)    if mo:      extra_files.pop(extra_files.index(pattern))      return  print "Found unexpected object:", node.name  raise svntest.main.SVNTreeUnequal####################################################################### Tests##   Each test must return on success or raise on failure.#----------------------------------------------------------------------def basic_checkout(sbox):  "basic checkout of a wc"  sbox.build()  wc_dir = sbox.wc_dir  # Checkout of a different URL into a working copy fails  A_url = svntest.main.current_repo_url + '/A'  svntest.actions.run_and_verify_svn("No error where some expected",                                      None, SVNAnyOutput,                                     # "Obstructed update",                                     'co', A_url,                                     '--username',                                     svntest.main.wc_author,                                     '--password',                                     svntest.main.wc_passwd,                                     wc_dir)  # Make some changes to the working copy  mu_path = os.path.join(wc_dir, 'A', 'mu')  svntest.main.file_append (mu_path, 'appended mu text')  lambda_path = os.path.join(wc_dir, 'A', 'B', 'lambda')  os.remove(lambda_path)  G_path = os.path.join(wc_dir, 'A', 'D', 'G')  svntest.actions.run_and_verify_svn(None, None, [], 'rm', G_path)  expected_output = svntest.actions.get_virginal_state(wc_dir, 1)  expected_output.tweak('A/mu', status='M ')  expected_output.tweak('A/B/lambda', status='! ')  expected_output.tweak('A/D/G',                        'A/D/G/pi',                        'A/D/G/rho',                        'A/D/G/tau', status='D ')    svntest.actions.run_and_verify_status(wc_dir, expected_output)  # Repeat checkout of original URL into working copy with modifications  url = svntest.main.current_repo_url  svntest.actions.run_and_verify_svn("Repeat checkout failed", None, [],                                     'co', url,                                     '--username',                                     svntest.main.wc_author,                                     '--password',                                     svntest.main.wc_passwd,                                     wc_dir)  # lambda is restored, modifications remain, deletes remain scheduled  # for deletion although files are restored to the filesystem  expected_output.tweak('A/B/lambda', status='  ')  svntest.actions.run_and_verify_status (wc_dir, expected_output)#----------------------------------------------------------------------def basic_status(sbox):  "basic status command"  sbox.build()  wc_dir = sbox.wc_dir  # Created expected output tree for 'svn status'  output = svntest.actions.get_virginal_state(wc_dir, 1)  svntest.actions.run_and_verify_status(wc_dir, output)  current_dir = os.getcwd()  try:    os.chdir(os.path.join(wc_dir, 'A'))    output = svntest.actions.get_virginal_state("..", 1)    svntest.actions.run_and_verify_status("..", output)  finally:    os.chdir(current_dir)  #----------------------------------------------------------------------def basic_commit(sbox):  "basic commit command"  sbox.build()  wc_dir = sbox.wc_dir  # Make a couple of local mods to files  mu_path = os.path.join(wc_dir, 'A', 'mu')  rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')  svntest.main.file_append (mu_path, 'appended mu text')  svntest.main.file_append (rho_path, 'new appended text for rho')  # Created expected output tree for 'svn ci'  expected_output = wc.State(wc_dir, {    'A/mu' : Item(verb='Sending'),    'A/D/G/rho' : Item(verb='Sending'),    })  # Create expected status tree; all local revisions should be at 1,  # but mu and rho should be at revision 2.  expected_status = svntest.actions.get_virginal_state(wc_dir, 2)  expected_status.tweak(wc_rev=1)  expected_status.tweak('A/mu', 'A/D/G/rho', wc_rev=2)  svntest.actions.run_and_verify_commit (wc_dir,                                         expected_output,                                         expected_status,                                         None,                                         None, None,                                         None, None,                                         wc_dir)    #----------------------------------------------------------------------def basic_update(sbox):  "basic update command"  sbox.build()  wc_dir = sbox.wc_dir  # Make a backup copy of the working copy  wc_backup = sbox.add_wc_path('backup')  svntest.actions.duplicate_dir(wc_dir, wc_backup)  # Make a couple of local mods to files  mu_path = os.path.join(wc_dir, 'A', 'mu')  rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')  svntest.main.file_append (mu_path, 'appended mu text')  svntest.main.file_append (rho_path, 'new appended text for rho')  # Created expected output tree for 'svn ci'  expected_output = wc.State(wc_dir, {    'A/mu' : Item(verb='Sending'),    'A/D/G/rho' : Item(verb='Sending'),    })  # Create expected status tree; all local revisions should be at 1,  # but mu and rho should be at revision 2.  expected_status = svntest.actions.get_virginal_state(wc_dir, 2)  expected_status.tweak(wc_rev=1)  expected_status.tweak('A/mu', 'A/D/G/rho', wc_rev=2)  # Commit.  svntest.actions.run_and_verify_commit (wc_dir, expected_output,                                         expected_status, None,                                         None, None, None, None, wc_dir)  # Create expected output tree for an update of the wc_backup.  expected_output = wc.State(wc_backup, {    'A/mu' : Item(status='U '),    'A/D/G/rho' : Item(status='U '),    })  # Create expected disk tree for the update.  expected_disk = svntest.main.greek_state.copy()  expected_disk.tweak('A/mu',                      contents=expected_disk.desc['A/mu'].contents                      + 'appended mu text')  expected_disk.tweak('A/D/G/rho',                      contents=expected_disk.desc['A/D/G/rho'].contents                      + 'new appended text for rho')  # Create expected status tree for the update.  expected_status = svntest.actions.get_virginal_state(wc_backup, 2)  # Do the update and check the results in three ways.  svntest.actions.run_and_verify_update(wc_backup,                                        expected_output,                                        expected_disk,                                        expected_status)  # Unversioned paths, those that are not immediate children of a versioned  # path, are skipped and do not raise an error  xx_path = os.path.join(wc_dir, 'xx', 'xx')  out, err = svntest.actions.run_and_verify_svn("update xx/xx",                                                ["Skipped '"+xx_path+"'\n"], [],                                                'update', xx_path)  out, err = svntest.actions.run_and_verify_svn("update xx/xx",                                                [], [],                                                'update', '--quiet', xx_path)#----------------------------------------------------------------------def basic_mkdir_url(sbox):  "basic mkdir URL"  sbox.build()  Y_url = svntest.main.current_repo_url + '/Y'  Y_Z_url = svntest.main.current_repo_url + '/Y/Z'  svntest.actions.run_and_verify_svn("mkdir URL URL/subdir",                                     ["\n", "Committed revision 2.\n"], [],                                     'mkdir', '-m', 'log_msg', Y_url, Y_Z_url)  expected_output = wc.State(sbox.wc_dir, {    'Y'   : Item(status='A '),    'Y/Z' : Item(status='A '),    })  expected_disk = svntest.main.greek_state.copy()  expected_disk.add({    'Y'   : Item(),    'Y/Z' : Item()    })  expected_status = svntest.actions.get_virginal_state(sbox.wc_dir, 2)  expected_status.add({    'Y'   : Item(status='  ', wc_rev=2),    'Y/Z' : Item(status='  ', wc_rev=2)    })  svntest.actions.run_and_verify_update(sbox.wc_dir,                                        expected_output,                                        expected_disk,                                        expected_status)#----------------------------------------------------------------------def basic_corruption(sbox):  "basic corruption detection"  ## I always wanted a test named "basic_corruption". :-)  ## Here's how it works:  ##  ##    1. Make a working copy at rev 1, duplicate it.  Now we have  ##        two working copies at rev 1.  Call them first and second.  ##    2. Make a local mod to `first/A/mu'.  ##    3. Intentionally corrupt `first/A/.svn/text-base/mu.svn-base'.  ##    4. Try to commit, expect a failure.  ##    5. Repair the text-base, commit again, expect success.  ##    6. Intentionally corrupt `second/A/.svn/text-base/mu.svn-base'.  ##    7. Try to update `second', expect failure.  ##    8. Repair the text-base, update again, expect success.  ##  ## Here we go...  sbox.build()  wc_dir = sbox.wc_dir  # Make the "other" working copy  other_wc = sbox.add_wc_path('other')  svntest.actions.duplicate_dir (wc_dir, other_wc)  # Make a local mod to mu  mu_path = os.path.join (wc_dir, 'A', 'mu')  svntest.main.file_append (mu_path, 'appended mu text')  # Created expected output tree for 'svn ci'  expected_output = wc.State(wc_dir, {    'A/mu' : Item(verb='Sending'),    })  # Create expected status tree; all local revisions should be at 1,  # but mu should be at revision 2.  expected_status = svntest.actions.get_virginal_state(wc_dir, 2)  expected_status.tweak(wc_rev=1)  expected_status.tweak('A/mu', wc_rev=2)  # Modify mu's text-base, so we get a checksum failure the first time  # we try to commit.  tb_dir_path = os.path.join (wc_dir, 'A',                              svntest.main.get_admin_name(), 'text-base')  mu_tb_path = os.path.join (tb_dir_path, 'mu.svn-base')  mu_saved_tb_path = mu_tb_path + "-saved"  tb_dir_saved_mode = os.stat(tb_dir_path)[stat.ST_MODE]  mu_tb_saved_mode = os.stat(mu_tb_path)[stat.ST_MODE]  os.chmod (tb_dir_path, 0777)  # ### What's a more portable way to do this?  os.chmod (mu_tb_path, 0666)   # ### Would rather not use hardcoded numbers.  shutil.copyfile (mu_tb_path, mu_saved_tb_path)  svntest.main.file_append (mu_tb_path, 'Aaagggkkk, corruption!')  os.chmod (tb_dir_path, tb_dir_saved_mode)  os.chmod (mu_tb_path, mu_tb_saved_mode)  # This commit should fail due to text base corruption.  svntest.actions.run_and_verify_commit (wc_dir, expected_output,                                            expected_status, "svn: Checksum",                                            None, None, None, None, wc_dir)  # Restore the uncorrupted text base.  os.chmod (tb_dir_path, 0777)  os.chmod (mu_tb_path, 0666)  os.remove (mu_tb_path)  os.rename (mu_saved_tb_path, mu_tb_path)  os.chmod (tb_dir_path, tb_dir_saved_mode)  os.chmod (mu_tb_path, mu_tb_saved_mode)  # This commit should succeed.  svntest.actions.run_and_verify_commit (wc_dir, expected_output,                                         expected_status, None,                                         None, None, None, None, wc_dir)  # Create expected output tree for an update of the other_wc.  expected_output = wc.State(other_wc, {    'A/mu' : Item(status='U '),    })  # Create expected disk tree for the update.  expected_disk = svntest.main.greek_state.copy()  expected_disk.tweak('A/mu',                      contents=expected_disk.desc['A/mu'].contents                      + 'appended mu text')  # Create expected status tree for the update.  expected_status = svntest.actions.get_virginal_state(other_wc, 2)    # Modify mu's text-base, so we get a checksum failure the first time  # we try to update.  tb_dir_path = os.path.join (other_wc, 'A',

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -