[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

[PATCH] Re: ra_svn deadlock

From: Philip Martin <philip_at_codematters.co.uk>
Date: 2002-12-14 16:37:04 CET

Philip Martin <philip@codematters.co.uk> writes:

> but I not sure that that is guaranteed to work either. We could do a
> proper hot-backup, but we would either need to know the path to the
> db4 utilities or we would have to know the names of the relevant db4
> files, neither of which is appealing. Alternatively we could use an
> svnadmin dump/load cycle to duplicate the repository. I haven't tried
> that because, while I'm sure Python can handle redirecting input, I
> don't know how to do it :)

OK Python experts, what about this. Will it work on non-Unix
platforms? Would it be better to dump to an intermediate file?

* subversion/tests/clients/cmdline/svntest/main.py (copy_repos): New

* subversion/tests/clients/cmdline/externals_tests.py
  (externals_test_setup): Use copy_repos.

Index: subversion/tests/clients/cmdline/svntest/main.py
===================================================================
--- subversion/tests/clients/cmdline/svntest/main.py (revision 4125)
+++ subversion/tests/clients/cmdline/svntest/main.py (working copy)
@@ -271,6 +271,32 @@
   # make the repos world-writeable, for mod_dav_svn's sake.
   chmod_tree(path, 0666, 0666)
 
+# For copying a repository
+def copy_repos(src_path, dst_path, head_revision):
+ "Copy the repository SRC_PATH to DST_PATH"
+
+ # A BDB hot-backup procedure would be more efficient, but that would
+ # require access to the BDB tools, and this doesn't.
+ create_repos(dst_path)
+ dump_in, dump_out, dump_err = os.popen3(svnadmin_binary + " dump " + src_path)
+ load_in, load_out, load_err = os.popen3(svnadmin_binary + " load " + dst_path)
+
+ while 1:
+ data = dump_out.read(1024) # Size picked at random
+ if data == "":
+ break
+ load_in.write(data)
+ load_in.close() # Tell load we are done? Seems to work.
+
+ # Check we have vaguely sensible looking output
+ if len(dump_err.readlines()) != head_revision + 1: # +1 for revision 0
+ print "Dump failed!"
+ load_out_lines = load_out.readlines()
+ if (load_out_lines[len(load_out_lines)-2]
+ != "------- Committed new rev " + str(head_revision)
+ + " (loaded from original rev " + str(head_revision) + ") >>>\n"):
+ print "Load failed!"
+
 def set_repos_paths(repo_dir):
   "Set current_repo_dir and current_repo_url from a relative path to the repo."
   global current_repo_dir, current_repo_url
Index: subversion/tests/clients/cmdline/externals_tests.py
===================================================================
--- subversion/tests/clients/cmdline/externals_tests.py (revision 4125)
+++ subversion/tests/clients/cmdline/externals_tests.py (working copy)
@@ -144,7 +144,7 @@
   # the one to which the first repository's `svn:externals' properties
   # will refer. After this, both repositories have five revisions
   # of random stuff, with no svn:externals props set yet.
- shutil.copytree(repo_dir, other_repo_dir)
+ svntest.main.copy_repos(repo_dir, other_repo_dir, 5)
 
   # Set up the externals properties on A/B/ and A/D/.
   externals_desc = \

-- 
Philip Martin
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sat Dec 14 16:37:44 2002

This is an archived mail posted to the Subversion Dev mailing list.