180 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Python
		
	
	
	
| 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')
 | |
| 
 | |
| # make a wc directory out of a given root url
 | |
| # cache previously obtained wcs!
 | |
| #
 | |
| def getrepowc(reponame='basetestrepo', wcname='wc'):
 | |
|     repo = py.test.ensuretemp(reponame)
 | |
|     wcdir = py.test.ensuretemp(wcname)
 | |
|     if not repo.listdir():
 | |
|         #assert not wcdir.check()
 | |
|         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() 
 | |
|     # repositories have read only files on windows
 | |
|     #repo.chmod(0777, rec=True)
 | |
|     repo.remove() 
 | |
|     wc.localpath.remove() 
 | |
|     savedrepo.move(repo) 
 | |
|     savedwc.localpath.move(wc.localpath) 
 | |
| 
 | |
| # create an empty repository for testing purposes and return the url to it
 | |
| 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):
 | |
|         # XXX we need to test more normalizing properties
 | |
|         url = self.root.join("/")
 | |
|         assert self.root == url
 | |
| 
 | |
|     #def test_different_revs_compare_unequal(self):
 | |
|     #    newpath = self.root.new(rev=1199)
 | |
|     #    assert newpath != self.root
 | |
| 
 | |
|     def test_exists_svn_root(self):
 | |
|         assert self.root.check()
 | |
| 
 | |
|     #def test_not_exists_rev(self):
 | |
|     #    url = self.root.__class__(self.rooturl, rev=500)
 | |
|     #    assert url.check(exists=0)
 | |
| 
 | |
|     #def test_nonexisting_listdir_rev(self):
 | |
|     #    url = self.root.__class__(self.rooturl, rev=500)
 | |
|     #    raises(py.error.ENOENT, url.listdir)
 | |
| 
 | |
|     #def test_newrev(self):
 | |
|     #    url = self.root.new(rev=None)
 | |
|     #    assert url.rev == None
 | |
|     #    assert url.strpath == self.root.strpath
 | |
|     #    url = self.root.new(rev=10)
 | |
|     #    assert url.rev == 10
 | |
| 
 | |
|     #def test_info_rev(self):
 | |
|     #    url = self.root.__class__(self.rooturl, rev=1155)
 | |
|     #    url = url.join("samplefile")
 | |
|     #    res = url.info()
 | |
|     #    assert res.size > len("samplefile") and res.created_rev == 1155
 | |
| 
 | |
|     # the following tests are easier if we have a path class
 | |
|     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
 | |
| 
 | |
| #cache.repositories.put(svnrepourl, 1200, 0)
 |