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 to %s" %(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)
|
|
|
|
|
|
|