Merge pull request #165 from orchardup/number-one

Stop 'fig up' when a container exits
This commit is contained in:
Ben Firshman 2014-03-28 23:03:00 +00:00
commit 23a8938809
2 changed files with 18 additions and 3 deletions

View File

@ -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 = {

View File

@ -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