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

📄 update_tests.py

📁 subversion-1.4.3-1.tar.gz 配置svn的源码
💻 PY
📖 第 1 页 / 共 5 页
字号:
#!/usr/bin/env python##  update_tests.py:  testing update cases.##  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, string, sys, re, os# Our testing moduleimport svntestfrom svntest import wc, SVNAnyOutput# (abbreviation)Skip = svntest.testcase.SkipXFail = svntest.testcase.XFailItem = svntest.wc.StateItem ####################################################################### Tests##   Each test must return on success or raise on failure.#----------------------------------------------------------------------# Helper for update_binary_file() test -- a custom singleton handler.def detect_extra_files(node, extra_files):  """NODE has been discovered as an extra file on disk.  Verify that  it matches one of the regular expressions in the EXTRA_FILES list of  lists, and that its contents matches the second part of the list  item.  If it matches, remove the match from the list.  If it doesn't  match, raise an exception."""  # Baton is of the form:  #  #       [ [wc_dir, pattern, contents],  #         [wc_dir, pattern, contents], ... ]  for fdata in extra_files:    wc_dir = fdata[0]    pattern = fdata[1]    contents = None    if len(fdata) > 2:      contents = fdata[2]    match_obj = re.match(pattern, node.name)    if match_obj:      if contents is None:        return      else:        fp = open(os.path.join (wc_dir, node.path))        real_contents = fp.read()  # suck up contents of a test .png file        fp.close()        if real_contents == contents:          extra_files.pop(extra_files.index(fdata)) # delete pattern from list          return  print "Found unexpected object:", node.name  raise svntest.main.SVNTreeUnequaldef update_binary_file(sbox):  "update a locally-modified binary file"  sbox.build()  wc_dir = sbox.wc_dir  # Add a binary file to the project.  fp = open(os.path.join(sys.path[0], "theta.bin"))  theta_contents = fp.read()  # suck up contents of a test .png file  fp.close()  theta_path = os.path.join(wc_dir, 'A', 'theta')  fp = open(theta_path, 'w')  fp.write(theta_contents)    # write png filedata into 'A/theta'  fp.close()    svntest.main.run_svn(None, 'add', theta_path)    # Created expected output tree for 'svn ci'  expected_output = svntest.wc.State(wc_dir, {    'A/theta' : Item(verb='Adding  (bin)'),    })  # Create expected status tree  expected_status = svntest.actions.get_virginal_state(wc_dir, 2)  expected_status.tweak(wc_rev=1)  expected_status.add({    'A/theta' : Item(status='  ', wc_rev=2),    })  # Commit the new binary file, creating revision 2.  svntest.actions.run_and_verify_commit(wc_dir, expected_output,                                        expected_status, None,                                        None, None, None, None, 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)  theta_backup_path = os.path.join(wc_backup, 'A', 'theta')  # Make a change to the binary file in the original working copy  svntest.main.file_append(theta_path, "revision 3 text")  theta_contents_r3 = theta_contents + "revision 3 text"  # Created expected output tree for 'svn ci'  expected_output = svntest.wc.State(wc_dir, {    'A/theta' : Item(verb='Sending'),    })  # Create expected status tree  expected_status = svntest.actions.get_virginal_state(wc_dir, 3)  expected_status.tweak(wc_rev=1)  expected_status.add({    'A/theta' : Item(status='  ', wc_rev=3),    })  # Commit original working copy again, creating revision 3.  svntest.actions.run_and_verify_commit(wc_dir, expected_output,                                        expected_status, None,                                        None, None, None, None, wc_dir)  # Now start working in the backup working copy:  # Make a local mod to theta  svntest.main.file_append(theta_backup_path, "extra theta text")  theta_contents_local = theta_contents + "extra theta text"  # Create expected output tree for an update of wc_backup.  expected_output = svntest.wc.State(wc_backup, {    'A/theta' : Item(status='C '),    })  # Create expected disk tree for the update --   #    look!  binary contents, and a binary property!  expected_disk = svntest.main.greek_state.copy()  expected_disk.add({    'A/theta' : Item(theta_contents_local,                     props={'svn:mime-type' : 'application/octet-stream'}),    })  # Create expected status tree for the update.  expected_status = svntest.actions.get_virginal_state(wc_backup, 3)  expected_status.add({    'A/theta' : Item(status='C ', wc_rev=3),    })  # Extra 'singleton' files we expect to exist after the update.  # In the case, the locally-modified binary file should be backed up  # to an .orig file.  #  This is a list of lists, of the form [ WC_DIR,  #                                         [pattern, contents], ...]  extra_files = [[wc_backup, 'theta.*\.r2', theta_contents],                 [wc_backup, 'theta.*\.r3', theta_contents_r3]]    # Do the update and check the results in three ways.  Pass our  # custom singleton handler to verify the .orig file; this handler  # will verify the existence (and contents) of both binary files  # after the update finishes.  svntest.actions.run_and_verify_update(wc_backup,                                        expected_output,                                        expected_disk,                                        expected_status,                                        None,                                        detect_extra_files, extra_files,                                        None, None, 1)  # verify that the extra_files list is now empty.  if len(extra_files) != 0:    print "Not all extra reject files have been accounted for:"    print extra_files    raise svntest.Failure#----------------------------------------------------------------------def update_binary_file_2(sbox):  "update to an old revision of a binary files"  sbox.build()  wc_dir = sbox.wc_dir  # Suck up contents of a test .png file.  fp = open(os.path.join(sys.path[0], "theta.bin"))  theta_contents = fp.read()    fp.close()  # 102400 is svn_txdelta_window_size.  We're going to make sure we  # have at least 102401 bytes of data in our second binary file (for  # no reason other than we have had problems in the past with getting  # svndiff data out of the repository for files > 102400 bytes).  # How?  Well, we'll just keep doubling the binary contents of the  # original theta.png until we're big enough.  zeta_contents = theta_contents  while(len(zeta_contents) < 102401):    zeta_contents = zeta_contents + zeta_contents  # Write our two files' contents out to disk, in A/theta and A/zeta.  theta_path = os.path.join(wc_dir, 'A', 'theta')  fp = open(theta_path, 'w')  fp.write(theta_contents)      fp.close()  zeta_path = os.path.join(wc_dir, 'A', 'zeta')  fp = open(zeta_path, 'w')  fp.write(zeta_contents)  fp.close()  # Now, `svn add' those two files.  svntest.main.run_svn(None, 'add', theta_path, zeta_path)    # Created expected output tree for 'svn ci'  expected_output = svntest.wc.State(wc_dir, {    'A/theta' : Item(verb='Adding  (bin)'),    'A/zeta' : Item(verb='Adding  (bin)'),    })  # Create expected status tree  expected_status = svntest.actions.get_virginal_state(wc_dir, 2)  expected_status.tweak(wc_rev=1)  expected_status.add({    'A/theta' : Item(status='  ', wc_rev=2),    'A/zeta' : Item(status='  ', wc_rev=2),    })  # Commit the new binary filea, creating revision 2.  svntest.actions.run_and_verify_commit(wc_dir, expected_output,                                        expected_status, None,                                        None, None, None, None, wc_dir)  # Make some mods to the binary files.  svntest.main.file_append (theta_path, "foobar")  new_theta_contents = theta_contents + "foobar"  svntest.main.file_append (zeta_path, "foobar")  new_zeta_contents = zeta_contents + "foobar"    # Created expected output tree for 'svn ci'  expected_output = svntest.wc.State(wc_dir, {    'A/theta' : Item(verb='Sending'),    'A/zeta' : Item(verb='Sending'),    })  # Create expected status tree  expected_status = svntest.actions.get_virginal_state(wc_dir, 3)  expected_status.tweak(wc_rev=1)  expected_status.add({    'A/theta' : Item(status='  ', wc_rev=3),    'A/zeta' : Item(status='  ', wc_rev=3),    })  # Commit original working copy again, creating revision 3.  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 to rev 2.  expected_output = svntest.wc.State(wc_dir, {    'A/theta' : Item(status='U '),    'A/zeta' : Item(status='U '),    })  # Create expected disk tree for the update --   #    look!  binary contents, and a binary property!  expected_disk = svntest.main.greek_state.copy()  expected_disk.add({    'A/theta' : Item(theta_contents,                     props={'svn:mime-type' : 'application/octet-stream'}),    'A/zeta' : Item(zeta_contents,                    props={'svn:mime-type' : 'application/octet-stream'}),    })  # Create expected status tree for the update.  expected_status = svntest.actions.get_virginal_state(wc_dir, 3)  expected_status.tweak(wc_rev=2)  expected_status.add({    'A/theta' : Item(status='  ', wc_rev=2),    'A/zeta' : Item(status='  ', wc_rev=2),    })  # Do an update from revision 2 and make sure that our binary file  # gets reverted to its original contents.  svntest.actions.run_and_verify_update(wc_dir,                                        expected_output,                                        expected_disk,                                        expected_status,                                        None, None, None,                                        None, None, 1,                                        '-r', '2', wc_dir)#----------------------------------------------------------------------def update_missing(sbox):  "update missing items (by name) in working copy"  sbox.build()  wc_dir = sbox.wc_dir  # Remove some files and dirs from the working copy.  mu_path = os.path.join(wc_dir, 'A', 'mu')  rho_path = os.path.join(wc_dir, 'A', 'D', 'G', 'rho')  E_path = os.path.join(wc_dir, 'A', 'B', 'E')  H_path = os.path.join(wc_dir, 'A', 'D', 'H')  # remove two files to verify that they get restored  os.remove(mu_path)  os.remove(rho_path)  ### FIXME I think directories work because they generate 'A'  ### feedback, is this the correct feedback?  svntest.main.safe_rmtree(E_path)  svntest.main.safe_rmtree(H_path)  # Create expected output tree for an update of the missing items by name  expected_output = svntest.wc.State(wc_dir, {    'A/mu'        : Item(verb='Restored'),    'A/D/G/rho'   : Item(verb='Restored'),    'A/B/E' : Item(status='A '),    'A/B/E/alpha' : Item(status='A '),    'A/B/E/beta' : Item(status='A '),    'A/D/H' : Item(status='A '),    'A/D/H/chi' : Item(status='A '),    'A/D/H/omega' : Item(status='A '),    'A/D/H/psi' : Item(status='A '),    })  # Create expected disk tree for the update.  expected_disk = svntest.main.greek_state.copy()  # Create expected status tree for the update.  expected_status = svntest.actions.get_virginal_state(wc_dir, 1)    # Do the update and check the results in three ways.  svntest.actions.run_and_verify_update(wc_dir,                                        expected_output,                                        expected_disk,

⌨️ 快捷键说明

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