import py import sys from py._path import svnwc as svncommon svnbin = py.path.local.sysfind('svn') repodump = py.path.local(__file__).dirpath('repotest.dump') from py.builtin import print_ def pytest_funcarg__repowc1(request): if svnbin is None: py.test.skip("svn binary not found") tmpdir = request.getfuncargvalue("tmpdir") repo, repourl, wc = request.cached_setup( setup=lambda: getrepowc(tmpdir, "path1repo", "path1wc"), scope="module", ) for x in ('test_remove', 'test_move', 'test_status_deleted'): if request.function.__name__.startswith(x): #print >>sys.stderr, ("saving repo", repo, "for", request.function) _savedrepowc = save_repowc(repo, wc) request.addfinalizer(lambda: restore_repowc(_savedrepowc)) return repo, repourl, wc def pytest_funcarg__repowc2(request): tmpdir = request.getfuncargvalue("tmpdir") name = request.function.__name__ repo, url, wc = getrepowc(tmpdir, "%s-repo-2" % name, "%s-wc-2" % name) return repo, url, wc def getsvnbin(): if svnbin is None: py.test.skip("svn binary not found") return svnbin # make a wc directory out of a given root url # cache previously obtained wcs! # def getrepowc(tmpdir, reponame='basetestrepo', wcname='wc'): repo = tmpdir.mkdir(reponame) wcdir = tmpdir.mkdir(wcname) repo.ensure(dir=1) py.process.cmdexec('svnadmin create "%s"' % svncommon._escape_helper(repo)) py.process.cmdexec('svnadmin load -q "%s" <"%s"' % (svncommon._escape_helper(repo), repodump)) print_("created svn repository", repo) wcdir.ensure(dir=1) wc = py.path.svnwc(wcdir) if py.std.sys.platform == 'win32': repourl = "file://" + '/' + str(repo).replace('\\', '/') else: repourl = "file://%s" % repo wc.checkout(repourl) print_("checked out new repo into", wc) return (repo, repourl, wc) def save_repowc(repo, wc): assert not str(repo).startswith("file://"), repo assert repo.check() savedrepo = repo.dirpath(repo.basename+".1") savedwc = wc.dirpath(wc.basename+".1") repo.copy(savedrepo) wc.localpath.copy(savedwc.localpath) return savedrepo, savedwc def restore_repowc(obj): savedrepo, savedwc = obj #print >>sys.stderr, ("restoring", savedrepo) repo = savedrepo.new(basename=savedrepo.basename[:-2]) assert repo.check() wc = savedwc.new(basename=savedwc.basename[:-2]) assert wc.check() wc.localpath.remove() repo.remove() savedrepo.move(repo) savedwc.localpath.move(wc.localpath) py.path.svnurl._lsnorevcache.clear() py.path.svnurl._lsrevcache.clear()