diff --git a/podman_compose.py b/podman_compose.py index 5a0e138..24e2d41 100755 --- a/podman_compose.py +++ b/podman_compose.py @@ -1464,10 +1464,8 @@ class Podman: chunk = await self._readchunk(reader) parts = chunk.split(b"\n") - # Iff parts ends with '', the last part is a incomplete line; - # The rest are complete lines - for i, part in enumerate(parts): + # Iff part is last and non-empty, we leave an ongoing line to be completed later if i < len(parts) - 1: _formatted_print_with_nl(part.decode()) line_ongoing = False @@ -1475,7 +1473,8 @@ class Podman: _formatted_print_without_nl(part.decode()) line_ongoing = True if line_ongoing: - print(file=sink, end="\n") # End the unfinished line + # Make sure the last line ends with EOL + print(file=sink, end="\n") def exec( self, diff --git a/tests/unit/test_compose_run_log_format.py b/tests/unit/test_compose_run_log_format.py index 878ead6..64871a7 100644 --- a/tests/unit/test_compose_run_log_format.py +++ b/tests/unit/test_compose_run_log_format.py @@ -8,10 +8,10 @@ from podman_compose import Podman class DummyReader: - def __init__(self, data=[]): - self.data = data + def __init__(self, data=None): + self.data = data or [] - async def readuntil(self, x): + async def readuntil(self, _): return self.data.pop(0) def at_eof(self): @@ -28,6 +28,16 @@ class TestComposeRunLogFormat(unittest.IsolatedAsyncioTestCase): await self.p._format_stream(reader, self.buffer, 'LL:') self.assertEqual(self.buffer.getvalue(), 'LL: hello, world\n') + async def test_empty(self): + reader = DummyReader([]) + await self.p._format_stream(reader, self.buffer, 'LL:') + self.assertEqual(self.buffer.getvalue(), '') + + async def test_empty2(self): + reader = DummyReader([b'']) + await self.p._format_stream(reader, self.buffer, 'LL:') + self.assertEqual(self.buffer.getvalue(), '') + async def test_empty_line(self): reader = DummyReader([b'\n']) await self.p._format_stream(reader, self.buffer, 'LL:')