diff --git a/lib/utils/text.py b/lib/utils/text.py index 7ec049e951a21b7717bcec91d5b3aa680fc5025d..058ee859238163c8503626ad7ba7c35ce6b4be4e 100644 --- a/lib/utils/text.py +++ b/lib/utils/text.py @@ -268,12 +268,16 @@ class ShellWriter: """ assert self._indent >= 0 - self._fh.write(self._indent * self.INDENT_STR) - if args: - self._fh.write(txt % args) + line = txt % args else: - self._fh.write(txt) + line = txt + + if line: + # Indent only if there's something on the line + self._fh.write(self._indent * self.INDENT_STR) + + self._fh.write(line) self._fh.write("\n") diff --git a/test/ganeti.utils.text_unittest.py b/test/ganeti.utils.text_unittest.py index 91039e173a765a1bbb6eddc09edda95b4d651d7c..92a983600dd15eab489858770b94b7174604c5c1 100755 --- a/test/ganeti.utils.text_unittest.py +++ b/test/ganeti.utils.text_unittest.py @@ -315,6 +315,27 @@ class TestShellWriter(unittest.TestCase): sw = None self.assertEqual(buf.getvalue(), "") + def testEmptyLines(self): + buf = StringIO() + sw = utils.ShellWriter(buf) + + def _AddLevel(level): + if level == 6: + return + sw.IncIndent() + try: + # Add empty line, it should not be indented + sw.Write("") + sw.Write(str(level)) + _AddLevel(level + 1) + finally: + sw.DecIndent() + + _AddLevel(1) + + self.assertEqual(buf.getvalue(), + "".join("\n%s%s\n" % (i * " ", i) for i in range(1, 6))) + class TestNormalizeAndValidateMac(unittest.TestCase): def testInvalid(self):