mirror of https://github.com/docker/compose.git
Align status output for parallel_execute
Previously docker-compose would output lines that looked like: Starting service ... done Starting short ... Starting service-with-a-long-name ... done It's difficult to scan down this output and get an idea of what's happening. Now the statuses are aligned, and output looks like this: Starting service ... done Starting short ... Starting service-with-a-long-name ... done To me, this is quite a bit easier to read. Signed-off-by: Evan Shaw <evan@vendhq.com>
This commit is contained in:
parent
41976b0f7f
commit
154adc5807
|
@ -38,7 +38,8 @@ def parallel_execute(objects, func, get_name, msg, get_deps=None, limit=None):
|
||||||
|
|
||||||
writer = ParallelStreamWriter(stream, msg)
|
writer = ParallelStreamWriter(stream, msg)
|
||||||
for obj in objects:
|
for obj in objects:
|
||||||
writer.initialize(get_name(obj))
|
writer.add_object(get_name(obj))
|
||||||
|
writer.write_initial()
|
||||||
|
|
||||||
events = parallel_execute_iter(objects, func, get_deps, limit)
|
events = parallel_execute_iter(objects, func, get_deps, limit)
|
||||||
|
|
||||||
|
@ -224,12 +225,18 @@ class ParallelStreamWriter(object):
|
||||||
self.stream = stream
|
self.stream = stream
|
||||||
self.msg = msg
|
self.msg = msg
|
||||||
self.lines = []
|
self.lines = []
|
||||||
|
self.width = 0
|
||||||
|
|
||||||
def initialize(self, obj_index):
|
def add_object(self, obj_index):
|
||||||
|
self.lines.append(obj_index)
|
||||||
|
self.width = max(self.width, len(obj_index))
|
||||||
|
|
||||||
|
def write_initial(self):
|
||||||
if self.msg is None:
|
if self.msg is None:
|
||||||
return
|
return
|
||||||
self.lines.append(obj_index)
|
for line in self.lines:
|
||||||
self.stream.write("{} {} ... \r\n".format(self.msg, obj_index))
|
self.stream.write("{} {:<{width}} ... \r\n".format(self.msg, line,
|
||||||
|
width=self.width))
|
||||||
self.stream.flush()
|
self.stream.flush()
|
||||||
|
|
||||||
def write(self, obj_index, status):
|
def write(self, obj_index, status):
|
||||||
|
@ -241,7 +248,8 @@ class ParallelStreamWriter(object):
|
||||||
self.stream.write("%c[%dA" % (27, diff))
|
self.stream.write("%c[%dA" % (27, diff))
|
||||||
# erase
|
# erase
|
||||||
self.stream.write("%c[2K\r" % 27)
|
self.stream.write("%c[2K\r" % 27)
|
||||||
self.stream.write("{} {} ... {}\r".format(self.msg, obj_index, status))
|
self.stream.write("{} {:<{width}} ... {}\r".format(self.msg, obj_index,
|
||||||
|
status, width=self.width))
|
||||||
# move back down
|
# move back down
|
||||||
self.stream.write("%c[%dB" % (27, diff))
|
self.stream.write("%c[%dB" % (27, diff))
|
||||||
self.stream.flush()
|
self.stream.flush()
|
||||||
|
|
|
@ -115,3 +115,18 @@ def test_parallel_execute_with_upstream_errors():
|
||||||
assert (data_volume, None, APIError) in events
|
assert (data_volume, None, APIError) in events
|
||||||
assert (db, None, UpstreamError) in events
|
assert (db, None, UpstreamError) in events
|
||||||
assert (web, None, UpstreamError) in events
|
assert (web, None, UpstreamError) in events
|
||||||
|
|
||||||
|
|
||||||
|
def test_parallel_execute_alignment(capsys):
|
||||||
|
results, errors = parallel_execute(
|
||||||
|
objects=["short", "a very long name"],
|
||||||
|
func=lambda x: x,
|
||||||
|
get_name=six.text_type,
|
||||||
|
msg="Aligning",
|
||||||
|
)
|
||||||
|
|
||||||
|
assert errors == {}
|
||||||
|
|
||||||
|
_, err = capsys.readouterr()
|
||||||
|
a, b = err.split('\n')[:2]
|
||||||
|
assert a.index('...') == b.index('...')
|
||||||
|
|
Loading…
Reference in New Issue