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

📄 externals_tests.py

📁 linux subdivision ying gai ke yi le ba
💻 PY
📖 第 1 页 / 共 3 页
字号:
                                     '--username', svntest.main.wc_author,
                                     '--password', svntest.main.wc_passwd,
                                     repo_url, wc_dir)

  svntest.actions.run_and_verify_svn("", None, [],
                                     'checkout',
                                     '--username', svntest.main.wc_author,
                                     '--password', svntest.main.wc_passwd,
                                     other_repo_url, other_wc_dir)

  # Commit some modifications from the other_wc.
  other_gamma_path = os.path.join(other_wc_dir, 'A', 'D', 'gamma')
  svntest.main.file_append(other_gamma_path, "\nNew text in other gamma.")

  expected_output = svntest.wc.State(other_wc_dir, {
    'A/D/gamma' : Item(verb='Sending'),
    })
  expected_status = svntest.actions.get_virginal_state(other_wc_dir, 5)
  expected_status.tweak(repos_rev=6)
  expected_status.tweak('A/D/gamma', wc_rev=6)
  svntest.actions.run_and_verify_commit(other_wc_dir,
                                        expected_output,
                                        expected_status,
                                        None, None, None, None, None,
                                        other_wc_dir)
  
  # Now update the regular wc to see if we get the change.  Note that
  # none of the module *properties* in this wc have been changed; only
  # the source repository of the modules has received a change, and
  # we're verifying that an update here pulls that change.

  # The output's going to be all screwy because of the module
  # notifications, so don't bother parsing it, just run update
  # directly.
  svntest.actions.run_and_verify_svn("", None, [], 'up', wc_dir)

  external_gamma_path = os.path.join(wc_dir, 'A', 'D', 'exdir_A', 'D', 'gamma')
  fp = open(external_gamma_path, 'r')
  lines = fp.readlines()
  if not ((len(lines) == 2)
          and (lines[0] == "This is the file 'gamma'.\n")
          and (lines[1] == "New text in other gamma.")):
    raise svntest.Failure("Unexpected contents for externally modified " +
                          external_gamma_path)
  fp.close()

  # Commit more modifications
  other_rho_path = os.path.join(other_wc_dir, 'A', 'D', 'G', 'rho')
  svntest.main.file_append(other_rho_path, "\nNew text in other rho.")

  expected_output = svntest.wc.State(other_wc_dir, {
    'A/D/G/rho' : Item(verb='Sending'),
    })
  expected_status = svntest.actions.get_virginal_state(other_wc_dir, 5)
  expected_status.tweak(repos_rev=7)
  expected_status.tweak('A/D/gamma', wc_rev=6)
  expected_status.tweak('A/D/G/rho', wc_rev=7)
  svntest.actions.run_and_verify_commit(other_wc_dir,
                                        expected_output,
                                        expected_status,
                                        None, None, None, None, None,
                                        other_wc_dir)

  svntest.actions.run_and_verify_svn("", None, [],
                                     'up', os.path.join(wc_dir, "A", "C"))

  external_rho_path = os.path.join(wc_dir, 'A', 'C', 'exdir_G', 'rho')
  fp = open(external_rho_path, 'r')
  lines = fp.readlines()
  if not ((len(lines) == 2)
          and (lines[0] == "This is the file 'rho'.\n")
          and (lines[1] == "New text in other rho.")):
    raise svntest.Failure("Unexpected contents for externally modified " +
                          external_rho_path)
  fp.close()

#----------------------------------------------------------------------

def modify_and_update_receive_new_external(sbox):
  "commit and update additional externals"

  externals_test_setup(sbox)
  wc_dir         = sbox.wc_dir

  repo_dir       = sbox.repo_dir
  repo_url       = sbox.repo_url
  other_repo_url = repo_url + ".other"

  # Checkout a working copy
  svntest.actions.run_and_verify_svn("", None, [],
                                     'checkout',
                                     '--username', svntest.main.wc_author,
                                     '--password', svntest.main.wc_passwd,
                                     repo_url, wc_dir)

  # Add one more external item
  B_path = os.path.join(wc_dir, "A/B")
  externals_desc = \
          "exdir_G       " + other_repo_url + "/A/D/G" + "\n" + \
          "exdir_H  -r 1 " + other_repo_url + "/A/D/H" + "\n" + \
          "exdir_Z       " + other_repo_url + "/A/D/H" + "\n"

  tmp_f = os.tempnam()
  svntest.main.file_append(tmp_f, externals_desc)
  svntest.actions.run_and_verify_svn("", None, [],
                                     'pset', '-F', tmp_f,
                                     'svn:externals', B_path)
  os.remove(tmp_f)

  # Now cd into A/B and try updating
  was_cwd = os.getcwd()
  os.chdir(B_path)
  try:
    # Once upon a time there was a core-dump here
    
    svntest.actions.run_and_verify_svn("update failed",
                                       SVNAnyOutput, [], 'up' )

  finally:
    os.chdir(was_cwd)

  exdir_Z_path = os.path.join(B_path, "exdir_Z")
  if not os.path.exists(exdir_Z_path):
    raise svntest.Failure("Probing for " + exdir_Z_path + " failed.")

#----------------------------------------------------------------------

def disallow_dot_or_dotdot_directory_reference(sbox):
  "error if external target dir involves '.' or '..'"
  sbox.build()
  wc_dir         = sbox.wc_dir
  repo_url       = sbox.repo_url

  # Try to set illegal externals in the original WC.
  def set_externals_for_path_expect_error(path, val, dir):
    tmp_f = os.tempnam(dir, 'tmp')
    svntest.main.file_append(tmp_f, val)
    svntest.actions.run_and_verify_svn("", None, SVNAnyOutput,
                                       'pset', '-F', tmp_f,
                                       'svn:externals', path)
    os.remove(tmp_f)

  B_path = os.path.join(wc_dir, 'A', 'B')
  G_path = os.path.join(wc_dir, 'A', 'D', 'G')
  H_path = os.path.join(wc_dir, 'A', 'D', 'H')
  C_path = os.path.join(wc_dir, 'A', 'C')
  F_path = os.path.join(wc_dir, 'A', 'C', 'F')
  externals_value_1 = "../foo"         + " " + repo_url + "/A/B/E" + "\n"
  externals_value_2 = "foo/bar/../baz" + " " + repo_url + "/A/B/E" + "\n"
  externals_value_3 = "foo/.."         + " " + repo_url + "/A/B/E" + "\n"
  externals_value_4 = "."              + " " + repo_url + "/A/B/E" + "\n"
  externals_value_5 = "./"             + " " + repo_url + "/A/B/E" + "\n"
  externals_value_6 = ".."             + " " + repo_url + "/A/B/E" + "\n"
  externals_value_7 = "././/.///."     + " " + repo_url + "/A/B/E" + "\n"
  externals_value_8 = "/foo"           + " " + repo_url + "/A/B/E" + "\n"


  set_externals_for_path_expect_error(B_path, externals_value_1, wc_dir)
  set_externals_for_path_expect_error(G_path, externals_value_2, wc_dir)
  set_externals_for_path_expect_error(H_path, externals_value_3, wc_dir)
  set_externals_for_path_expect_error(C_path, externals_value_4, wc_dir)
  set_externals_for_path_expect_error(F_path, externals_value_5, wc_dir)
  set_externals_for_path_expect_error(B_path, externals_value_6, wc_dir)
  set_externals_for_path_expect_error(G_path, externals_value_7, wc_dir)
  set_externals_for_path_expect_error(H_path, externals_value_8, wc_dir)


#----------------------------------------------------------------------

def export_with_externals(sbox):
  "test exports with externals"

  externals_test_setup(sbox)

  wc_dir         = sbox.wc_dir
  repo_dir       = sbox.repo_dir
  repo_url       = sbox.repo_url

  # Create a working copy.
  svntest.actions.run_and_verify_svn("", None, [],
                                     'export',
                                     '--username', svntest.main.wc_author,
                                     '--password', svntest.main.wc_passwd,
                                     repo_url, wc_dir)

  # Probe the working copy a bit, see if it's as expected.
  exdir_G_path    = os.path.join(wc_dir, "A", "C", "exdir_G")
  exdir_G_pi_path = os.path.join(exdir_G_path, "pi")
  exdir_H_path       = os.path.join(wc_dir, "A", "C", "exdir_H")
  exdir_H_omega_path = os.path.join(exdir_H_path, "omega")
  x_path     = os.path.join(wc_dir, "A", "D", "x")
  y_path     = os.path.join(x_path, "y")
  z_path     = os.path.join(y_path, "z")
  blah_path  = os.path.join(z_path, "blah")
  alpha_path = os.path.join(blah_path, "E", "alpha")
  beta_path  = os.path.join(blah_path, "E", "beta")

  if (not os.path.exists(exdir_G_path)):
    raise svntest.Failure("Probing for " + exdir_G_path + " failed.")
  if (not os.path.exists(exdir_G_pi_path)):
    raise svntest.Failure("Probing for " + exdir_G_pi_path + " failed.")
  if (not os.path.exists(exdir_H_path)):
    raise svntest.Failure("Probing for " + exdir_H_path + " failed.")
  if (not os.path.exists(exdir_H_omega_path)):
    raise svntest.Failure("Probing for " + exdir_H_omega_path + " failed.")
  if (not os.path.exists(x_path)):
    raise svntest.Failure("Probing for " + x_path + " failed.")
  if (not os.path.exists(y_path)):
    raise svntest.Failure("Probing for " + y_path + " failed.")
  if (not os.path.exists(z_path)):
    raise svntest.Failure("Probing for " + z_path + " failed.")
  if (not os.path.exists(z_path)):
    raise svntest.Failure("Probing for " + z_path + " failed.")
  if (not os.path.exists(alpha_path)):
    raise svntest.Failure("Probing for " + alpha_path + " failed.")
  if (not os.path.exists(beta_path)):
    raise svntest.Failure("Probing for " + beta_path + " failed.")

  # Pick some files, make sure their contents are as expected.
  fp = open(exdir_G_pi_path, 'r')
  lines = fp.readlines()
  if not ((len(lines) == 2) \
          and (lines[0] == "This is the file 'pi'.\n") \
          and (lines[1] == "Added to pi in revision 3.\n")):
    raise svntest.Failure("Unexpected contents for rev 1 of " +
                          exdir_G_pi_path)
  fp = open(exdir_H_omega_path, 'r')
  lines = fp.readlines()
  if not ((len(lines) == 1) and (lines[0] == "This is the file 'omega'.")):
    raise svntest.Failure("Unexpected contents for rev 1 of " +
                          exdir_H_omega_path)



########################################################################
# Run the tests


# list all tests here, starting with None:
test_list = [ None,
              checkout_with_externals,
              update_receive_new_external,
              update_lose_external,
              update_change_pristine_external,
              update_change_modified_external,
              update_receive_change_under_external,
              modify_and_update_receive_new_external,
              disallow_dot_or_dotdot_directory_reference,
              export_with_externals,
             ]

if __name__ == '__main__':
  warnings.filterwarnings('ignore', 'tempnam', RuntimeWarning)
  svntest.main.run_tests(test_list)
  # NOTREACHED


### End of file.

⌨️ 快捷键说明

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