瀏覽代碼

Merge pull request #165 from orchardup/number-one

Stop 'fig up' when a container exits
Ben Firshman 11 年之前
父節點
當前提交
23a8938809
共有 2 個文件被更改,包括 18 次插入3 次删除
  1. 8 2
      fig/cli/log_printer.py
  2. 10 1
      fig/cli/multiplexer.py

+ 8 - 2
fig/cli/log_printer.py

@@ -4,7 +4,7 @@ import sys
 
 from itertools import cycle
 
-from .multiplexer import Multiplexer
+from .multiplexer import Multiplexer, STOP
 from . import colors
 from .utils import split_buffer
 
@@ -34,7 +34,13 @@ class LogPrinter(object):
         prefix = color_fn(container.name + " | ")
         # Attach to container before log printer starts running
         line_generator = split_buffer(self._attach(container), '\n')
-        return (prefix + line.decode('utf-8') for line in line_generator)
+
+        for line in line_generator:
+            yield prefix + line.decode('utf-8')
+
+        exit_code = container.wait()
+        yield color_fn("%s exited with code %s\n" % (container.name, exit_code))
+        yield STOP
 
     def _attach(self, container):
         params = {

+ 10 - 1
fig/cli/multiplexer.py

@@ -7,6 +7,11 @@ except ImportError:
     from queue import Queue, Empty  # Python 3.x
 
 
+# Yield STOP from an input generator to stop the
+# top-level loop without processing any more input.
+STOP = object()
+
+
 class Multiplexer(object):
     def __init__(self, generators):
         self.generators = generators
@@ -17,7 +22,11 @@ class Multiplexer(object):
 
         while True:
             try:
-                yield self.queue.get(timeout=0.1)
+                item = self.queue.get(timeout=0.1)
+                if item is STOP:
+                    break
+                else:
+                    yield item
             except Empty:
                 pass