<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[151030] contrib/buildbot-test/master.cfg</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/151030">151030</a></dd>
<dt>Author</dt> <dd>cal@macports.org</dd>
<dt>Date</dt> <dd>2016-08-05 12:55:51 -0700 (Fri, 05 Aug 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>buildbot: Use mpbb list-subports, ignore stderr

Switch to ./mpbb list-subports over the older subports.tcl script. This has the
advantage of avoiding a loop, because that loop is now handled in mpbb.

Additionally, ignore output written to stderr and do not interpret it as port
name. Buildbot 0.8.x by default includes stderr while parsing the result and
the Portfiles we run in this step can print arbitrary strings to stderr.
Buildbot 0.9.x has a fix for this, but fortunately we can work around the
problem with the 0.8.x feature set as well.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#contribbuildbottestmastercfg">contrib/buildbot-test/master.cfg</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="contribbuildbottestmastercfg"></a>
<div class="modfile"><h4>Modified: contrib/buildbot-test/master.cfg (151029 => 151030)</h4>
<pre class="diff"><span>
<span class="info">--- contrib/buildbot-test/master.cfg        2016-08-05 19:48:56 UTC (rev 151029)
+++ contrib/buildbot-test/master.cfg        2016-08-05 19:55:51 UTC (rev 151030)
</span><span class="lines">@@ -306,9 +306,26 @@
</span><span class="cx">         description=&quot;checkout&quot;,
</span><span class="cx">         haltOnFailure=True))
</span><span class="cx"> 
</span><ins>+    def extract_subportlist(rc, stdout, stderr):
+        &quot;&quot;&quot;
+        Extract function for SetPropertyFromCommand(). Buildbot did not get the
+        capability to ignore or distinguish stderr output before 0.9.x, but
+        extract_fn always had the option to deal with them separately, so do
+        that.
+
+        This is called by SetPropertyFromCommand with the return value of the
+        command and strings containing stdout and stderr. The return value
+        should be a dictionary of new properties to be set.
+        &quot;&quot;&quot;
+        if rc != 0:
+            # Set an empty subport list on error
+            return {&quot;subportlist&quot;: &quot;&quot;}
+        subports = [x.strip() for x in stdout.splitlines()]
+        return {&quot;subportlist&quot;: &quot; &quot;.join(subports)}
+
</ins><span class="cx">     portwatcher_factory.addStep(SetPropertyFromCommandWithPortlist(
</span><del>-        command=WithProperties('for portname in %(fullportlist)s; do for subport in $(./mpbb/mpbb subports --port &quot;$portname&quot;); do echo $subport; done; done'),
-        property=&quot;subportlist&quot;,
</del><ins>+        command=WithProperties('./mpbb/mpbb list-subports %(fullportlist)s'),
+        extract_fn=extract_subportlist,
</ins><span class="cx">         name=&quot;subports&quot;,
</span><span class="cx">         description=&quot;subports&quot;))
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>