185 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/env python 
 | |
| 
 | |
| from _findpy import py
 | |
| import sys
 | |
| 
 | |
| pydir = py.path.local(py.__file__).dirpath()
 | |
| rootdir = pydir.dirpath()
 | |
| 
 | |
| def gen_manifest(): 
 | |
|     pywc = py.path.svnwc(pydir)
 | |
|     status = pywc.status(rec=True)
 | |
|     #assert not status.modified 
 | |
|     #assert not status.deleted  
 | |
|     #assert not status.added  
 | |
|     versioned = dict([(x.localpath,1) for x in status.allpath()])
 | |
| 
 | |
|     l = []
 | |
|     for x in rootdir.visit(None, lambda x: x.basename != '.svn'): 
 | |
|         if x.check(file=1): 
 | |
|             names = [y.basename for y in x.parts()]
 | |
|             if '.svn' in names: 
 | |
|                 l.append(x) 
 | |
|             elif x in versioned: 
 | |
|                 l.append(x) 
 | |
|     l.append(rootdir / "setup.py")
 | |
|     l = [x.relto(rootdir) for x in l]
 | |
|     l.append("")
 | |
|     s = "\n".join(l) 
 | |
|     return s 
 | |
| 
 | |
| def trace(arg): 
 | |
|     lines = str(arg).split('\n') 
 | |
|     prefix = "[trace] "
 | |
|     prefix = "* " 
 | |
|     indent = len(prefix)  
 | |
|     ispace = " " * indent
 | |
|     lines = [ispace + line for line in lines]
 | |
|     if lines: 
 | |
|         lines[0] = prefix + lines[0][indent:]
 | |
|     for line in lines: 
 | |
|         print >>py.std.sys.stdout, line 
 | |
| 
 | |
| def make_distfiles(tmpdir): 
 | |
|     """ return distdir with tar.gz and zipfile. """ 
 | |
|     manifest = tmpdir.join('MANIFEST')
 | |
|     trace("generating %s" %(manifest,))
 | |
|     content = gen_manifest() 
 | |
|     manifest.write(content) 
 | |
|     trace("wrote %d files into manifest file" %len(content.split('\n')))
 | |
| 
 | |
|     distdir = tmpdir.ensure('dist', dir=1)
 | |
|     oldir = rootdir.chdir()
 | |
|     try: 
 | |
|         from py.__.misc._dist import setup 
 | |
|         trace("invoking sdist, generating into %s" % (distdir,)) 
 | |
|         setup(py, script_name="setup.py", 
 | |
|               script_args=('-q', 'sdist', '--no-prune', 
 | |
|                            '-m', str(manifest), 
 | |
|                            '--formats=gztar,zip',  
 | |
|                            '-d', str(distdir)))
 | |
|         setup(py, script_name="setup.py", 
 | |
|               script_args=('-q', 'bdist_wininst', 
 | |
|                            #'-m', str(manifest), 
 | |
|                            '-d', str(distdir)))
 | |
|     finally: 
 | |
|         oldir.chdir()
 | |
|     return distdir 
 | |
| 
 | |
| 
 | |
| def pytest(unpacked): 
 | |
|     trace("py-testing %s" % unpacked)
 | |
|     old = unpacked.chdir()
 | |
|     try: 
 | |
|         import os
 | |
|         os.system("python py/bin/py.test py") 
 | |
|     finally: 
 | |
|         old.chdir()
 | |
|     
 | |
| def unpackremotetar(tmpdir, strurl): 
 | |
|     import tarfile, urllib
 | |
|     f = urllib.urlopen(strurl)
 | |
|     basename = strurl.split('/')[-1]
 | |
|     target = tmpdir.join(basename)
 | |
|     trace("downloading %r to %s" %(strurl, target,))
 | |
|     target.write(f.read())
 | |
| 
 | |
|     trace("extracting to %s" %(target,))
 | |
|     old = tmpdir.chdir()
 | |
|     try: 
 | |
|         py.process.cmdexec("tar zxf %s" %(target,))
 | |
|     finally: 
 | |
|         old.chdir()
 | |
|     prefix = '.tar.gz'
 | |
|     assert basename.endswith(prefix) 
 | |
|     stripped = basename[:-len(prefix)]
 | |
|     unpacked = tmpdir.join(stripped) 
 | |
|     assert unpacked
 | |
|     return unpacked 
 | |
|        
 | |
| def checksvnworks(unpacked): 
 | |
|     pywc = py.path.svnwc(unpacked.join('py'))
 | |
|     trace("checking versioning works: %s" %(pywc,))
 | |
|     status = pywc.status(rec=True)
 | |
|     assert not status.modified 
 | |
|     assert not status.deleted 
 | |
|     assert not status.unknown 
 | |
| 
 | |
| def pytest_remote(address, url): 
 | |
|     gw = py.execnet.SshGateway(address)
 | |
|     basename = url[url.rfind('/')+1:]
 | |
|     purebasename = basename[:-len('.tar.gz')]
 | |
| 
 | |
|     def mytrace(x, l=[]): 
 | |
|         l.append(x)
 | |
|         if x.endswith('\n'): 
 | |
|             trace("".join(l))
 | |
|             l[:] = []
 | |
|             
 | |
|     channel = gw.remote_exec(stdout=mytrace, stderr=sys.stderr, source="""
 | |
|         url = %(url)r
 | |
|         basename = %(basename)r
 | |
|         purebasename = %(purebasename)r
 | |
|         import os, urllib
 | |
|         f = urllib.urlopen(url) 
 | |
|         print "reading from", url 
 | |
|         s = f.read()
 | |
|         f.close()
 | |
|         f = open(basename, 'w')
 | |
|         f.write(s) 
 | |
|         f.close()
 | |
|         if os.path.exists(purebasename):
 | |
|             import shutil 
 | |
|             shutil.rmtree(purebasename) 
 | |
|         os.system("tar zxf %%s" %% (basename,))
 | |
|         print "unpacked", purebasename 
 | |
|         os.chdir(purebasename)
 | |
|         print "testing at %(address)s ..."
 | |
|         #os.system("python py/bin/py.test py")
 | |
|         import commands
 | |
|         status, output = commands.getstatusoutput("python py/bin/py.test py")
 | |
|         #print output 
 | |
|         print "status:", status
 | |
| 
 | |
|     """ % locals())
 | |
|     channel.waitclose(200.0)
 | |
|     
 | |
| if __name__ == '__main__': 
 | |
|     py.magic.invoke(assertion=True) 
 | |
|     version = py.std.sys.argv[1]
 | |
|     assert py.__package__.version == version, (
 | |
|             "py package has version %s\nlocation: %s" % 
 | |
|             (py.__package__.version, pydir))
 | |
| 
 | |
|     tmpdir = py.path.local.get_temproot().join('makepyrelease-%s' % version) 
 | |
|     if tmpdir.check(): 
 | |
|         trace("removing %s" %(tmpdir,))
 | |
|         tmpdir.remove()
 | |
|     tmpdir.mkdir() 
 | |
|     trace("using tmpdir %s" %(tmpdir,))
 | |
| 
 | |
|     distdir = make_distfiles(tmpdir) 
 | |
|     targz = distdir.join('py-%s.tar.gz' % version)
 | |
|     zip = distdir.join('py-%s.zip' % version)
 | |
|     files = distdir.listdir() 
 | |
|     for fn in files: 
 | |
|         assert fn.check(file=1) 
 | |
| 
 | |
|     remotedir = 'codespeak.net://www/codespeak.net/htdocs/download/py/' 
 | |
|     source = distdir  # " ".join([str(x) for x in files]) 
 | |
|     trace("rsyncing %(source)s to %(remotedir)s" % locals())
 | |
|     py.process.cmdexec("rsync -avz %(source)s/ %(remotedir)s" % locals())
 | |
| 
 | |
|     ddir = tmpdir.ensure('download', dir=1)
 | |
|     URL = py.__package__.download_url # 'http://codespeak.net/download/py/' 
 | |
|     unpacked = unpackremotetar(ddir, URL)
 | |
|     assert unpacked == ddir.join("py-%s" % (version,))
 | |
| 
 | |
|     #checksvnworks(unpacked) 
 | |
|     #pytest(unpacked)
 | |
| 
 | |
|     pytest_remote('test@codespeak.net', py.__package__.download_url)
 | |
| 
 | |
| 
 | |
| 
 |