[Buildbot-commits] buildbot/buildbot/status html.py,1.45,1.46

Brian Warner warner at users.sourceforge.net
Wed Nov 24 03:35:07 UTC 2004


Update of /cvsroot/buildbot/buildbot/buildbot/status
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20994/buildbot/status

Modified Files:
	html.py 
Log Message:
(TextLog.resumeProducing): fix the "as text" link, handle client
disconnects that occur while we're still sending old chunks.


Index: html.py
===================================================================
RCS file: /cvsroot/buildbot/buildbot/buildbot/status/html.py,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -d -r1.45 -r1.46
--- html.py	24 Nov 2004 02:41:21 -0000	1.45
+++ html.py	24 Nov 2004 03:35:05 -0000	1.46
@@ -475,11 +475,11 @@
         data += "<pre>\n"
         return data
 
-    def content(self, entries, asText):
+    def content(self, entries):
         spanfmt = '<span class="%s">%s</span>'
         data = ""
         for type, entry in entries:
-            if asText:
+            if self.asText:
                 if type != builder.HEADER:
                     data += entry
             else:
@@ -493,8 +493,7 @@
         return data
 
     def render_HEAD(self, request):
-        asText = request.args.get("text", None)
-        if asText:
+        if request.args.has_key("text"):
             request.setHeader("content-type", "text/plain")
         else:
             request.setHeader("content-type", "text/html")
@@ -504,23 +503,32 @@
         return ''
 
     def resumeProducing(self):
-        if self.chunkNumber < len(self.original.entries):
+        while self.chunkNumber < len(self.original.entries):
             chunk = self.original.entries[self.chunkNumber]
             self.chunkNumber += 1
-            self.req.write(self.content([chunk], self.asText))
-            return
+            data = self.content([chunk])
+            if data:
+                self.req.write(data)
+                return
         # now send all of .runEntries in a batch
-        data = self.content(self.original.runEntries, self.asText)
-        self.req.write(data)
+        data = self.content(self.original.runEntries)
+        if data:
+            self.req.write(data)
         self.req.unregisterProducer()
         # then see if there is more to come
         self.original.subscribe(self, False)
+        self.subscribed = True
         d = self.original.waitUntilFinished()
         d.addCallback(self.finished)
 
+    def stopProducing(self):
+        pass
+
     def render_GET(self, req):
         self.req = req
-        self.asText = self.req.args.get("text", None)
+        self.asText = False
+        if self.req.args.has_key("text"):
+            self.asText = True
 
         if self.asText:
             req.setHeader("content-type", "text/plain")
@@ -531,19 +539,22 @@
             req.write(self.htmlHeader(req))
 
         self.chunkNumber = 0
+        self.subscribed = False
         req.registerProducer(self, False)
         d = req.notifyFinish()
         d.addErrback(self.stop)
         return server.NOT_DONE_YET
 
     def stop(self, why):
-        self.original.unsubscribe(self)
+        if self.subscribed:
+            self.original.unsubscribe(self)
+            self.subscribed = False
         self.req.unregisterProducer()
         # our .finished callback may still be fired
         self.req = None
 
     def logChunk(self, build, step, log, channel, text):
-        output = self.content([(channel, text)], self.asText)
+        output = self.content([(channel, text)])
         try:
             self.req.write(output)
         except pb.DeadReferenceError:





More information about the Commits mailing list