summaryrefslogtreecommitdiff
path: root/subversion/tests/cmdline/svntest/actions.py
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/tests/cmdline/svntest/actions.py')
-rw-r--r--subversion/tests/cmdline/svntest/actions.py116
1 files changed, 79 insertions, 37 deletions
diff --git a/subversion/tests/cmdline/svntest/actions.py b/subversion/tests/cmdline/svntest/actions.py
index 8930b63..bb2ee63 100644
--- a/subversion/tests/cmdline/svntest/actions.py
+++ b/subversion/tests/cmdline/svntest/actions.py
@@ -64,22 +64,15 @@ def no_relocate_validation():
def do_relocate_validation():
os.environ['SVN_I_LOVE_CORRUPTED_WORKING_COPIES_SO_DISABLE_RELOCATE_VALIDATION'] = 'no'
-def setup_pristine_greek_repository():
- """Create the pristine repository and 'svn import' the greek tree"""
-
- # these directories don't exist out of the box, so we may have to create them
- if not os.path.exists(main.general_wc_dir):
- os.makedirs(main.general_wc_dir)
-
- if not os.path.exists(main.general_repo_dir):
- os.makedirs(main.general_repo_dir) # this also creates all the intermediate dirs
-
+def _setup_pristine_repo(tree_state,
+ repos_dir, dump_dir, repos_url,
+ use_precooked=True):
# If there's no pristine repos, create one.
- if not os.path.exists(main.pristine_greek_repos_dir):
- if main.options.fsfs_version is not None:
- main.unpack_greek_repos(main.pristine_greek_repos_dir)
+ if not os.path.exists(repos_dir):
+ if use_precooked and main.options.fsfs_version is not None:
+ main.unpack_greek_repos(repos_dir)
else:
- main.create_repos(main.pristine_greek_repos_dir)
+ main.create_repos(repos_dir)
# if this is dav, gives us access rights to import the greek tree.
if main.is_ra_type_dav():
@@ -87,15 +80,14 @@ def setup_pristine_greek_repository():
main.file_write(authz_file, "[/]\n* = rw\n")
# dump the greek tree to disk.
- main.greek_state.write_to_disk(main.greek_dump_dir)
+ tree_state.write_to_disk(dump_dir)
# import the greek tree, using l:foo/p:bar
### todo: svn should not be prompting for auth info when using
### repositories with no auth/auth requirements
_, output, _ = main.run_svn(None, 'import', '-m',
'Log message for revision 1.',
- main.greek_dump_dir,
- main.pristine_greek_repos_url)
+ dump_dir, repos_url)
# verify the printed output of 'svn import'.
lastline = output.pop().strip()
@@ -107,7 +99,7 @@ def setup_pristine_greek_repository():
sys.exit(1)
output_tree = wc.State.from_commit(output)
- expected_output_tree = main.greek_state.copy(main.greek_dump_dir)
+ expected_output_tree = tree_state.copy(dump_dir)
expected_output_tree.tweak(verb='Adding',
contents=None)
@@ -122,9 +114,36 @@ def setup_pristine_greek_repository():
# Finally, disallow any changes to the "pristine" repos.
error_msg = "Don't modify the pristine repository"
- create_failing_hook(main.pristine_greek_repos_dir, 'start-commit', error_msg)
- create_failing_hook(main.pristine_greek_repos_dir, 'pre-lock', error_msg)
- create_failing_hook(main.pristine_greek_repos_dir, 'pre-revprop-change', error_msg)
+ create_failing_hook(repos_dir, 'start-commit', error_msg)
+ create_failing_hook(repos_dir, 'pre-lock', error_msg)
+ create_failing_hook(repos_dir, 'pre-revprop-change', error_msg)
+
+def setup_pristine_repositories():
+ """Create the pristine repository and 'svn import' the greek tree"""
+
+ # these directories don't exist out of the box, so we may have to create them
+ if not os.path.exists(main.general_wc_dir):
+ os.makedirs(main.general_wc_dir)
+
+ if not os.path.exists(main.general_repo_dir):
+ os.makedirs(main.general_repo_dir) # this also creates all the intermediate dirs
+
+ if not os.path.exists(main.other_dav_root_dir):
+ os.makedirs(main.other_dav_root_dir)
+ if not os.path.exists(main.non_dav_root_dir):
+ os.makedirs(main.non_dav_root_dir)
+
+ _setup_pristine_repo(main.greek_state,
+ main.pristine_greek_repos_dir,
+ main.greek_dump_dir,
+ main.pristine_greek_repos_url)
+
+ # NOTE: We don't use precooked trojan repositories.
+ _setup_pristine_repo(main.trojan_state,
+ main.pristine_trojan_repos_dir,
+ main.trojan_dump_dir,
+ main.pristine_trojan_repos_url,
+ use_precooked=False)
######################################################################
@@ -144,23 +163,19 @@ def guarantee_empty_repository(path, minor_version):
# Used by every test, so that they can run independently of one
# another. Every time this routine is called, it recursively copies
# the `pristine repos' to a new location.
-# Note: make sure setup_pristine_greek_repository was called once before
-# using this function.
-def guarantee_greek_repository(path, minor_version):
- """Guarantee that a local svn repository exists at PATH, containing
- nothing but the greek-tree at revision 1."""
-
- if path == main.pristine_greek_repos_dir:
+# Note: make sure setup_pristine_repositories was called once before
+# using these functions.
+def _guarantee_repos(path, repos_dir, minor_version, use_precooked=True):
+ if path == repos_dir:
logger.error("attempt to overwrite the pristine repos! Aborting.")
sys.exit(1)
# copy the pristine repository to PATH.
main.safe_rmtree(path)
- if (main.options.fsfs_version is not None):
+ if (use_precooked and main.options.fsfs_version is not None):
failed = main.unpack_greek_repos(path)
else:
- failed = main.copy_repos(main.pristine_greek_repos_dir,
- path, 1, 1, minor_version)
+ failed = main.copy_repos(repos_dir, path, 1, 1, minor_version)
if failed:
logger.error("copying repository failed.")
sys.exit(1)
@@ -171,6 +186,18 @@ def guarantee_greek_repository(path, minor_version):
# give the repository a unique UUID
run_and_verify_svnadmin([], [], 'setuuid', path)
+def guarantee_greek_repository(path, minor_version):
+ """Guarantee that a local svn repository exists at PATH, containing
+ nothing but the greek-tree at revision 1."""
+
+ _guarantee_repos(path, main.pristine_greek_repos_dir, minor_version)
+
+def guarantee_trojan_repository(path, minor_version):
+ """Guarantee that a local svn repository exists at PATH, containing
+ nothing but the trojan-tree at revision 1."""
+
+ _guarantee_repos(path, main.pristine_trojan_repos_dir, minor_version, False)
+
def run_and_verify_atomic_ra_revprop_change(expected_stdout,
expected_stderr,
expected_exit,
@@ -1937,7 +1964,7 @@ def run_and_verify_revert(expected_paths, *args):
# This allows a test to *quickly* bootstrap itself.
def make_repo_and_wc(sbox, create_wc=True, read_only=False, empty=False,
- minor_version=None):
+ minor_version=None, tree=None):
"""Create a fresh repository and check out a WC from it. If EMPTY is
True, the repository and WC will be empty and at revision 0,
otherwise they will contain the 'Greek Tree' at revision 1.
@@ -1962,9 +1989,17 @@ def make_repo_and_wc(sbox, create_wc=True, read_only=False, empty=False,
guarantee_empty_repository(sbox.repo_dir, minor_version)
expected_state = svntest.wc.State('', {})
else:
- if not read_only:
- guarantee_greek_repository(sbox.repo_dir, minor_version)
- expected_state = main.greek_state
+ if tree == 'greek':
+ if not read_only:
+ guarantee_greek_repository(sbox.repo_dir, minor_version)
+ expected_state = main.greek_state
+ elif tree == 'trojan':
+ if not read_only:
+ guarantee_trojan_repository(sbox.repo_dir, minor_version)
+ expected_state = main.trojan_state
+ else:
+ raise ValueError("'tree' must be 'greek' or 'trojan'"
+ " but was '%s'" % str(tree))
if create_wc:
# Generate the expected output tree.
@@ -1998,14 +2033,21 @@ def duplicate_dir(wc_name, wc_copy_name):
-def get_virginal_state(wc_dir, rev):
+def get_virginal_state(wc_dir, rev, tree='greek'):
"Return a virginal greek tree state for a WC and repos at revision REV."
rev = str(rev) ### maybe switch rev to an integer?
# copy the greek tree, shift it to the new wc_dir, insert a root elem,
# then tweak all values
- state = main.greek_state.copy()
+ if tree == 'greek':
+ state = main.greek_state.copy()
+ elif tree == 'trojan':
+ state = main.trojan_state.copy()
+ else:
+ raise ValueError("'tree' must be 'greek' or 'trojan'"
+ " but was '%s'" % str(tree))
+
state.wc_dir = wc_dir
state.desc[''] = wc.StateItem()
state.tweak(contents=None, status=' ', wc_rev=rev)