[Checkins] SVN: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/ seems to work, gotta test it live
Adam Groszer
agroszer at gmail.com
Wed Jun 9 15:13:14 EDT 2010
Log message for revision 113302:
seems to work, gotta test it live
Changed:
U Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt
U Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py
U Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/test.ini
U Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/testing.py
-=-
Modified: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt
===================================================================
--- Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt 2010-06-09 15:08:04 UTC (rev 113301)
+++ Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt 2010-06-09 19:13:14 UTC (rev 113302)
@@ -1,3 +1,5 @@
+Building windows binary eggs
+----------------------------
Install mocks:
@@ -17,16 +19,121 @@
>>> oldURLgetter = build.Package.urlGetterKlass
>>> build.Package.urlGetterKlass = testing.MockURLGetter()
+Let's see:
>>> import os.path
>>> testininame = os.path.join(os.path.dirname(build.__file__), 'test.ini')
- >>> build.main([testininame, '-v'])
+ >>> build.main([testininame, '-v']) # doctest: +REPORT_NDIFF
+ INFO - loading configuration from /home/adi/zopefix/zope.wineggbuilder/trunk/src/zope/wineggbuilder/test.ini
+ INFO - Starting to build
+ DEBUG - getting http://pypi.python.org/simple/zope.proxy/
+ DEBUG - Got a file: zope.proxy-3.4.0-py2.4-win32.egg
+ DEBUG - Got a file: zope.proxy-3.4.0.tar.gz
+ DEBUG - Got a file: zope.proxy-3.4.2.zip
+ DEBUG - Got a file: zope.proxy-3.4.2-py2.6-win32.egg
+ DEBUG - Got a file: zope.proxy-3.4.1-py2.4-win32.egg
+ DEBUG - Got a file: zope.proxy-3.4.1.zip
+ DEBUG - Got a file: zope.proxy-3.4.2-py2.5-win32.egg
+ DEBUG - Got a file: zope.proxy-3.4.2-py2.4-win32.egg
+ DEBUG - Got a file: zope.proxy-3.4.0-py2.5-win32.egg
+ DEBUG - Got a file: zope.proxy-3.4.0.zip
+ DEBUG - Checking if build required for zope.proxy 3.4.0 py25_32
+ DEBUG - Build not required for zope.proxy 3.4.0 py25_32
+ DEBUG - Checking if build required for zope.proxy 3.4.0 py26_32
+ DEBUG - Build required for zope.proxy 3.4.0 py26_32
+ DEBUG - Command: svn co --non-interactive svn://svn.zope.org/repos/main/zope.proxy/tags/3.4.0 /tmp/tmp...wineggbuilder
+ DEBUG - Output:
+ A /tmp/tmpgqt2dHwineggbuilder/bootstrap.py
+ A /tmp/tmpgqt2dHwineggbuilder/buildout.cfg
+ A /tmp/tmpgqt2dHwineggbuilder/CHANGES.txt
+ A /tmp/tmpgqt2dHwineggbuilder/setup.py
+ A /tmp/tmpgqt2dHwineggbuilder/src
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/_zope_proxy_proxy.c
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/tests
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/tests/__init__.py
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/tests/test_proxy.py
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/tests/test_decorator.py
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/__init__.py
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/proxy.h
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/decorator.py
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/proxy/interfaces.py
+ A /tmp/tmpgqt2dHwineggbuilder/src/zope/__init__.py
+ A /tmp/tmpgqt2dHwineggbuilder/README.txt
+ U /tmp/tmpgqt2dHwineggbuilder
+ Checked out revision 113298.
+ INFO - Starting build for zope.proxy 3.4.0 py26_32
+ DEBUG - Running: call c:\program files\msvc\msvcvars.bat
+ c:\Python26\python setup.py build_ext --compiler msvc bdist_egg upload
+ In: /tmp/tmp...wineggbuilder
+ DEBUG - Command: /tmp/tmp...bat
+ DEBUG - Output:
+ <BLANKLINE>
+ <BLANKLINE>
+ DEBUG - Checking if build required for zope.proxy 3.4.1 py25_32
+ DEBUG - Build required for zope.proxy 3.4.1 py25_32
+ DEBUG - Checking if build required for zope.proxy 3.4.1 py26_32
+ DEBUG - Build required for zope.proxy 3.4.1 py26_32
+ DEBUG - Command: svn co --non-interactive svn://svn.zope.org/repos/main/zope.proxy/tags/3.4.1 /tmp/tmp...wineggbuilder
+ DEBUG - Output:
+ A /tmp/tmpKNdQxlwineggbuilder/bootstrap.py
+ A /tmp/tmpKNdQxlwineggbuilder/buildout.cfg
+ A /tmp/tmpKNdQxlwineggbuilder/CHANGES.txt
+ A /tmp/tmpKNdQxlwineggbuilder/test.py
+ A /tmp/tmpKNdQxlwineggbuilder/setup.py
+ A /tmp/tmpKNdQxlwineggbuilder/src
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/_zope_proxy_proxy.c
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/tests
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/tests/__init__.py
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/tests/test_proxy.py
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/tests/test_decorator.py
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/DEPENDENCIES.cfg
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/__init__.py
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/proxy.h
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/decorator.py
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/interfaces.py
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/proxy/SETUP.cfg
+ A /tmp/tmpKNdQxlwineggbuilder/src/zope/__init__.py
+ A /tmp/tmpKNdQxlwineggbuilder/README.txt
+ U /tmp/tmpKNdQxlwineggbuilder
+ Checked out revision 113298.
+ INFO - Starting build for zope.proxy 3.4.1 py25_32
+ DEBUG - Running: set PATH=%PATH%;c:\mingw32\bin
+ c:\Python25\python setup.py build_ext --compiler mingw32 bdist_egg upload
+ In: /tmp/tmp...wineggbuilder
+ DEBUG - Command: /tmp/tmp...bat
+ DEBUG - Output:
+ <BLANKLINE>
+ <BLANKLINE>
+ INFO - Starting build for zope.proxy 3.4.1 py26_32
+ DEBUG - Running: call c:\program files\msvc\msvcvars.bat
+ c:\Python26\python setup.py build_ext --compiler msvc bdist_egg upload
+ In: /tmp/tmp...wineggbuilder
+ DEBUG - Command: /tmp/tmp...bat
+ DEBUG - Output:
+ <BLANKLINE>
+ <BLANKLINE>
+ DEBUG - Checking if build required for zope.proxy 3.4.2 py25_32
+ DEBUG - Build not required for zope.proxy 3.4.2 py25_32
+ DEBUG - Checking if build required for zope.proxy 3.4.2 py26_32
+ DEBUG - Build not required for zope.proxy 3.4.2 py26_32
+ INFO - Done.
+Let's see what was executed on mocks:
>>> from pprint import pprint
>>> pprint(testing.MOCKLOG)
+ ['package_releases: zope.proxy',
+ 'urlget: http://pypi.python.org/simple/zope.proxy/',
+ 'cmd: svn co --non-interactive svn://svn.zope.org/repos/main/zope.proxy/tags/3.4.0 /tmp/tmp...wineggbuilder in None',
+ 'cmd: /tmp/tmp...bat in /tmp/tmp...wineggbuilder',
+ 'cmd: svn co --non-interactive svn://svn.zope.org/repos/main/zope.proxy/tags/3.4.1 /tmp/tmp...wineggbuilder in None',
+ 'cmd: /tmp/tmp...bat in /tmp/tmp...wineggbuilder',
+ 'cmd: /tmp/tmp...bat in /tmp/tmp...wineggbuilder']
-
Remove mocks:
>>> base.SVN.commandKlass = oldSVNcommand
Modified: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py
===================================================================
--- Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py 2010-06-09 15:08:04 UTC (rev 113301)
+++ Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py 2010-06-09 19:13:14 UTC (rev 113302)
@@ -47,33 +47,49 @@
def checkBuild(self, package, version, files):
"""check whether build is required"""
+ LOGGER.debug('Checking if build required for %s %s %s',
+ package.name, version, self.name)
needBuild = True
fe = self.fileEnding.lower()
for file in files:
if file.lower().endswith(fe):
needBuild = False
break
+
+ if needBuild:
+ LOGGER.debug('Build required for %s %s %s',
+ package.name, version, self.name)
+ else:
+ LOGGER.debug('Build not required for %s %s %s',
+ package.name, version, self.name)
return needBuild
def build(self, package, version, files, sourceFolder):
- if self.checkBuild(package, version, files):
- #we really need to build
- #we have the source in sourceFolder
- cmd = self.commandKlass(cwd=sourceFolder, exitOnError=False)
+ LOGGER.info('Starting build for %s %s %s',
+ package.name, version, self.name)
+ #we really need to build
+ #we have the source in sourceFolder
+ cmd = self.commandKlass(cwd=sourceFolder, exitOnError=False)
- if len(self.command.splitlines()) > 1:
- #in case there are more lines we got to do .bat file
- tmpfile = tempfile.NamedTemporaryFile(suffix='.bat')
- command = tmpfile.name
- tmpfile.write(self.command)
- tmpfile.file.flush()
- else:
- command = self.command
+ if len(self.command.splitlines()) > 1:
+ #in case there are more lines we got to do .bat file
+ tmpfile = tempfile.NamedTemporaryFile(suffix='.bat')
+ command = tmpfile.name
+ tmpfile.write(self.command)
+ tmpfile.file.flush()
+ else:
+ command = self.command
- cmd.do(command)
+ LOGGER.debug('Running: %s\nIn: %s', self.command, sourceFolder)
- pass
+ #this ought to build and upload the egg
+ output = cmd.do(command)
+def versionToTuple(version):
+ parts = version.split('.')
+ parts = [int(v) for v in parts]
+ return tuple(parts)
+
class Package(object):
#hook to enable testing
pypiKlass = base.PYPI
@@ -102,9 +118,25 @@
versions = pypi.package_releases(self.name, show_hidden=True)
#1.1 filter versions according to minVersion and maxVersion:
+ if self.minVersion:
+ minver = versionToTuple(self.minVersion)
+ versions = [v for v in versions
+ if versionToTuple(v) >= minver]
+ if self.maxVersion:
+ maxver = versionToTuple(self.maxVersion)
+ versions = [v for v in versions
+ if versionToTuple(v) <= maxver]
+ versions.sort()
+ if len(versions) == 0:
+ #nothing to do
+ LOGGER.info('%s no versions, nothing to do', self.name)
+ return
+
#2 get file list of each version
+ LOGGER.debug('getting %s', self.pypiurl)
+
verFiles = defaultdict(list)
simple = self.urlGetterKlass().get(self.pypiurl)
soup = BeautifulSoup.BeautifulSoup(simple)
@@ -117,19 +149,20 @@
version = m.group(1)
if version not in versions:
continue
+ LOGGER.debug('Got a file: %s', cntnt)
verFiles[version].append(cntnt)
svn = self.svnKlass()
for version in versions:
#3 check whether we need a build
- needBuild = False
+ needs = []
for target in self.targets:
needBuild = target.checkBuild(
self, version, verFiles.get(version, []))
if needBuild:
- break
+ needs.append(target)
- if needBuild:
+ if needs:
tmpfolder = tempfile.mkdtemp('wineggbuilder')
try:
#3.1 svn co tag
@@ -137,17 +170,17 @@
svn.co(svnurl, tmpfolder)
#3.2 build missing
- for target in self.targets:
+ for target in needs:
needBuild = target.build(
self, version, verFiles.get(version, []), tmpfolder)
finally:
#3.3 del temp folder
base.rmtree(tmpfolder)
-
-
class Builder(object):
def __init__(self, configFileName, options):
+ LOGGER.info('loading configuration from %s', configFileName)
+
config = ConfigParser.RawConfigParser()
config.read(configFileName)
@@ -160,10 +193,14 @@
self.packages.append(Package(pkg, config, options, self.compilers))
def runCLI(self):
+ LOGGER.info('Starting to build')
+
for pkg in self.packages:
pkg.build()
+ LOGGER.info('Done.')
+
def main(args=None):
# Make sure we get the arguments.
if args is None:
Modified: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/test.ini
===================================================================
--- Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/test.ini 2010-06-09 15:08:04 UTC (rev 113301)
+++ Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/test.ini 2010-06-09 19:13:14 UTC (rev 113302)
@@ -26,6 +26,6 @@
[zope.proxy]
pypiurl = http://pypi.python.org/simple/zope.proxy/
tagurl = svn://svn.zope.org/repos/main/zope.proxy/tags/
-minVersion =
-maxVersion =
-targets = py25_32 py26_32
\ No newline at end of file
+minVersion = 3.4
+maxVersion = 3.5
+targets = py25_32 py26_32
Modified: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/testing.py
===================================================================
--- Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/testing.py 2010-06-09 15:08:04 UTC (rev 113301)
+++ Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/testing.py 2010-06-09 19:13:14 UTC (rev 113302)
@@ -8,11 +8,15 @@
import doctest
import pprint
+from zope.wineggbuilder import base
+
+LOGGER = base.LOGGER
+
MOCKLOG = []
#format is [(expected cmd, result)]
CommandIO = [
-#svn co --non-interactive svn://svn.zope.org/repos/main/zope.proxy/tags/3.6.0 /tmp/tmpgqt2dHwineggbuilder
+#svn co --non-interactive svn://svn.zope.org/repos/main/zope.proxy/tags/3.4.0 /tmp/tmpgqt2dHwineggbuilder
"""A /tmp/tmpgqt2dHwineggbuilder/bootstrap.py
A /tmp/tmpgqt2dHwineggbuilder/buildout.cfg
A /tmp/tmpgqt2dHwineggbuilder/CHANGES.txt
@@ -33,6 +37,9 @@
A /tmp/tmpgqt2dHwineggbuilder/README.txt
U /tmp/tmpgqt2dHwineggbuilder
Checked out revision 113298.""",
+#cmd: /tmp/tmp9pHarC.bat in /tmp/tmpWIuwvGwineggbuilder
+"""
+""",
#svn co --non-interactive svn://svn.zope.org/repos/main/zope.proxy/tags/3.4.1 /tmp/tmpKNdQxlwineggbuilder
"""A /tmp/tmpKNdQxlwineggbuilder/bootstrap.py
A /tmp/tmpKNdQxlwineggbuilder/buildout.cfg
@@ -57,12 +64,11 @@
A /tmp/tmpKNdQxlwineggbuilder/README.txt
U /tmp/tmpKNdQxlwineggbuilder
Checked out revision 113298.""",
-'svn co',
-'svn co',
-'bat',
-'bat',
-'bat',
-'bat',
+#cmd: /tmp/tmpXhyppL.bat in /tmp/tmpIK6VMJwineggbuilder
+"""
+""",
+"""
+""",
]
class MockCommand(object):
@@ -79,12 +85,16 @@
global MOCKLOG
MOCKLOG.append('cmd: %s in %s' % (cmd, self.cwd))
+ LOGGER.debug('Command: ' + cmd)
+
global CommandIO
next = CommandIO.pop(0)
if isinstance(next, Exception):
raise next
+ LOGGER.debug('Output: \n%s' % next)
+
return next
PYPI_RELEASES = {
@@ -142,7 +152,6 @@
<a href="../../packages/2.6/z/zope.proxy/zope.proxy-3.6.0-py2.6-win32.egg#md5=6984986850f74abdb3cd0c738579cb16">zope.proxy-3.6.0-py2.6-win32.egg</a><br/>
<a href="../../packages/source/z/zope.proxy/zope.proxy-3.4.0.zip#md5=3fef9f29c8b920c9f20aa3a2f92afa70">zope.proxy-3.4.0.zip</a><br/>
<a href="../../packages/2.4/z/zope.proxy/zope.proxy-3.3.0-py2.4-win32.egg#md5=554d10d694d7e5ea9468d88c1c078387">zope.proxy-3.3.0-py2.4-win32.egg</a><br/>
-<a href="../../packages/2.5/z/zope.proxy/zope.proxy-3.4.1-py2.5-win32.egg#md5=82c2d44d956ceaa1c838bf23be18fe95">zope.proxy-3.4.1-py2.5-win32.egg</a><br/>
<a href="http://svn.zope.org/zope.proxy" rel="homepage">3.3.0 home_page</a><br/>
<a href="http://docs.python.org/ref/sequence-methods.html">http://docs.python.org/ref/sequence-methods.html</a><br/>
</body></html>""",
More information about the checkins
mailing list