[Checkins] SVN: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/ status at the end
Adam Groszer
agroszer at gmail.com
Tue Jun 15 14:39:28 EDT 2010
Log message for revision 113502:
status at the end
Changed:
U Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt
U Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/base.py
U Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py
-=-
Modified: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt
===================================================================
--- Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt 2010-06-15 18:05:40 UTC (rev 113501)
+++ Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/README.txt 2010-06-15 18:39:28 UTC (rev 113502)
@@ -23,7 +23,7 @@
>>> import os.path
>>> testininame = os.path.join(os.path.dirname(build.__file__), 'test.ini')
- >>> build.main([testininame, '-v']) # doctest: +REPORT_NDIFF
+ >>> build.main([testininame, '-v', '-s']) # doctest: +REPORT_NDIFF
INFO - loading configuration from ...zope.wineggbuilder\trunk\src\zope\wineggbuilder\test.ini
INFO - Starting to build
DEBUG - getting http://pypi.python.org/simple/zope.proxy/
@@ -267,6 +267,16 @@
DEBUG - Checking if build required for [zope.proxy_34_to_35] zope.proxy 3.4.2 py26_32
DEBUG - Build not required for [zope.proxy_34_to_35] zope.proxy 3.4.2 py26_32
INFO - Done.
+ INFO -
+ <BLANKLINE>
+ zope.proxy py25_32 py24_32 py26_32 py26_64
+ ==================== ========== ========== ========== ==========
+ 3.3.0 n/a n/a n/a n/a
+ 3.4.0 ex n/a done n/a
+ 3.4.1 done n/a n/a n/a
+ 3.4.2 ex n/a ex n/a
+ 3.5.0 n/a n/a n/a n/a
+ 3.6.0 n/a n/a n/a n/a
Let's see what was executed on mocks:
Modified: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/base.py
===================================================================
--- Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/base.py 2010-06-15 18:05:40 UTC (rev 113501)
+++ Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/base.py 2010-06-15 18:39:28 UTC (rev 113502)
@@ -179,3 +179,8 @@
"-d", "--dryrun", action="store_true",
dest="dryrun", default=False,
help="When specified, no upload is done.")
+
+parser.add_option(
+ "-s", "--status", action="store_true",
+ dest="status", default=False,
+ help="When specified, detailed status is output at the end.")
Modified: Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py
===================================================================
--- Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py 2010-06-15 18:05:40 UTC (rev 113501)
+++ Sandbox/adamg/zope.wineggbuilder/trunk/src/zope/wineggbuilder/build.py 2010-06-15 18:39:28 UTC (rev 113502)
@@ -64,7 +64,7 @@
package.sectionName, package.name, version, self.name)
return needBuild
- def build(self, package, version, files, sourceFolder):
+ def build(self, package, version, files, sourceFolder, status):
LOGGER.info('Starting build for [%s] %s %s %s',
package.sectionName, package.name, version, self.name)
#we really need to build
@@ -97,12 +97,14 @@
and 'Server response (200): OK' in output:
LOGGER.info("Upload seems to be OK.\n%s",
'\n'.join(output.splitlines()[-3:]))
+ status.setStatus(package, version, "done", self)
except KeyboardInterrupt:
raise
except:
#prepare for the worst
LOGGER.exception("An error occurred while running the build command")
#continue without bailing out
+ status.setStatus(package, version, "err", self)
if tmpfile:
os.remove(tmpfile)
@@ -145,11 +147,13 @@
for target in config.get(sectionName, 'targets').split():
self.targets.append(compilers[target])
- def build(self):
+ def build(self, status):
#1 get versions from pypi
pypi = self.pypiKlass()
versions = pypi.package_releases(self.name, show_hidden=True)
+ status.setVersions(self, versions)
+
#1.1 filter versions according to minVersion and maxVersion:
if self.minVersion:
minver = versionToTuple(self.minVersion)
@@ -185,7 +189,7 @@
LOGGER.debug('Got a file: %s', cntnt)
verFiles[version].append(cntnt)
- svn = self.svnKlass()
+ svn = self.svnKlass(exitOnError=False)
for version in versions:
#3 check whether we need a build
needs = []
@@ -194,22 +198,72 @@
self, version, verFiles.get(version, []))
if needBuild:
needs.append(target)
+ else:
+ status.setStatus(self, version, "ex", target)
if needs:
tmpfolder = tempfile.mkdtemp('wineggbuilder')
try:
- #3.1 svn co tag
- svnurl = "%s/%s" % (self.tagurl, version)
- svn.co(svnurl, tmpfolder)
+ try:
+ #3.1 svn co tag
+ svnurl = "%s/%s" % (self.tagurl, version)
+ svn.co(svnurl, tmpfolder)
+ except OSError:
+ status.setStatus(self, version, "SVN error")
#3.2 build missing
for target in needs:
needBuild = target.build(
- self, version, verFiles.get(version, []), tmpfolder)
+ self, version, verFiles.get(version, []),
+ tmpfolder, status)
finally:
#3.3 del temp folder
base.rmtree(tmpfolder)
+class Status(object):
+ def __init__(self, packages, targets):
+ self.data = {}
+ self.packages = packages
+ self.targets = targets
+
+ for p in packages:
+ self.data[p.name] = {}
+
+ def setVersions(self, package, versions):
+ for v in versions:
+ self.data[package.name][v]= {}
+ for t in self.targets:
+ self.data[package.name][v][t] = 'n/a'
+
+ def setStatus(self, package, version, status, target=None):
+ if target is None:
+ # this is a version general status
+ self.data[package.name][version] = status
+ else:
+ self.data[package.name][version][target.name] = status
+
+ def log(self):
+ text = ['\n']
+ for pname in sorted(self.data.keys()):
+ package = self.data[pname]
+ vs = ' '.join([target.ljust(10) for target in self.targets])
+ txt = "%s %s" % (pname.ljust(20), vs)
+ text.append(txt)
+ vs = ' '.join(['='*10 for target in self.targets])
+ txt = "%s %s" % ('='*20, vs)
+ text.append(txt)
+ for vname in sorted(package.keys()):
+ version = package[vname]
+ if isinstance(version, basestring):
+ txt = "%20s %s" % (vname, version)
+ else:
+ vs = ' '.join([version[target].ljust(10) for target in self.targets])
+ txt = "%20s %s" % (vname, vs)
+ text.append(txt)
+ output = '\n'.join(text)
+ LOGGER.info(output)
+
+
class Builder(object):
def __init__(self, configFileName, options):
LOGGER.info('loading configuration from %s', configFileName)
@@ -234,9 +288,11 @@
def runCLI(self):
LOGGER.info('Starting to build')
+ status = Status(self.packages, self.compilers)
+
for pkg in self.packages:
try:
- pkg.build()
+ pkg.build(status)
except KeyboardInterrupt:
raise
except:
@@ -247,7 +303,9 @@
LOGGER.info('Done.')
+ status.log()
+
def main(args=None):
# Make sure we get the arguments.
if args is None:
More information about the checkins
mailing list