utils.ShellWriter: Don't indent empty lines
authorMichael Hanselmann <hansmi@google.com>
Fri, 21 Oct 2011 11:32:17 +0000 (13:32 +0200)
committerMichael Hanselmann <hansmi@google.com>
Mon, 24 Oct 2011 12:49:57 +0000 (14:49 +0200)
Empty lines shouldn't get indented. Unittest included.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>

lib/utils/text.py
test/ganeti.utils.text_unittest.py

index 7ec049e..058ee85 100644 (file)
@@ -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")
 
index 91039e1..92a9836 100755 (executable)
@@ -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):