import sys |
import py |
from py import path, test, process |
from py.__.path.testing.fscommon import CommonFSTests, setuptestfs |
from py.__.path.svn import cache, svncommon |
|
mypath = py.magic.autopath() |
repodump = mypath.dirpath('repotest.dump') |
|
|
|
|
def getrepowc(reponame='basetestrepo', wcname='wc'): |
repo = py.test.ensuretemp(reponame) |
wcdir = py.test.ensuretemp(wcname) |
if not repo.listdir(): |
|
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': |
repo = '/' + str(repo).replace('\\', '/') |
wc.checkout(url='file://%s' % repo) |
print "checked out new repo into", wc |
else: |
print "using repository at", repo |
wc = py.path.svnwc(wcdir) |
return ("file://%s" % repo, wc) |
|
|
def save_repowc(): |
repo, wc = getrepowc() |
repo = py.path.local(repo[len("file://"):]) |
assert repo.check() |
savedrepo = repo.dirpath('repo_save') |
savedwc = wc.dirpath('wc_save') |
repo.copy(savedrepo) |
wc.localpath.copy(savedwc.localpath) |
return savedrepo, savedwc |
|
def restore_repowc((savedrepo, savedwc)): |
repo, wc = getrepowc() |
print repo |
print repo[len("file://"):] |
repo = py.path.local(repo[len("file://"):]) |
print repo |
assert repo.check() |
|
|
repo.remove() |
wc.localpath.remove() |
savedrepo.move(repo) |
savedwc.localpath.move(wc.localpath) |
|
|
def make_test_repo(name="test-repository"): |
repo = py.test.ensuretemp(name) |
try: |
py.process.cmdexec('svnadmin create %s' % repo) |
except: |
repo.remove() |
raise |
if sys.platform == 'win32': |
repo = '/' + str(repo).replace('\\', '/') |
return py.path.svnurl("file://%s" % repo) |
|
class CommonSvnTests(CommonFSTests): |
|
def setup_method(self, meth): |
bn = meth.func_name |
for x in 'test_remove', 'test_move': |
if bn.startswith(x): |
self._savedrepowc = save_repowc() |
|
def teardown_method(self, meth): |
x = getattr(self, '_savedrepowc', None) |
if x is not None: |
restore_repowc(x) |
del self._savedrepowc |
|
def test_propget(self): |
url = self.root.join("samplefile") |
value = url.propget('svn:eol-style') |
assert value == 'native' |
|
def test_proplist(self): |
url = self.root.join("samplefile") |
res = url.proplist() |
assert res['svn:eol-style'] == 'native' |
|
def test_info(self): |
url = self.root.join("samplefile") |
res = url.info() |
assert res.size > len("samplefile") and res.created_rev >= 0 |
|
def test_log_simple(self): |
py.test.skip("XXX: does not work at least on svn below 1.3") |
url = self.root.join("samplefile") |
logentries = url.log() |
for logentry in logentries: |
assert logentry.rev == 1 |
assert hasattr(logentry, 'author') |
assert hasattr(logentry, 'date') |
|
class CommonCommandAndBindingTests(CommonSvnTests): |
def test_trailing_slash_is_stripped(self): |
|
url = self.root.join("/") |
assert self.root == url |
|
|
|
|
|
def test_exists_svn_root(self): |
assert self.root.check() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_repocache_simple(self): |
repocache = cache.RepoCache() |
repocache.put(self.root.strpath, 42) |
url, rev = repocache.get(self.root.join('test').strpath) |
assert rev == 42 |
assert url == self.root.strpath |
|
def test_repocache_notimeout(self): |
repocache = cache.RepoCache() |
repocache.timeout = 0 |
repocache.put(self.root.strpath, self.root.rev) |
url, rev = repocache.get(self.root.strpath) |
assert rev == -1 |
assert url == self.root.strpath |
|
def test_repocache_outdated(self): |
repocache = cache.RepoCache() |
repocache.put(self.root.strpath, 42, timestamp=0) |
url, rev = repocache.get(self.root.join('test').strpath) |
assert rev == -1 |
assert url == self.root.strpath |
|
def _test_getreporev(self): |
""" this test runs so slow it's usually disabled """ |
old = cache.repositories.repos |
try: |
_repocache.clear() |
root = self.root.new(rev=-1) |
url, rev = cache.repocache.get(root.strpath) |
assert rev>=0 |
assert url == svnrepourl |
finally: |
repositories.repos = old |
|
|
|