From 45ebbbf44b8833c4f15670419f35da3ce60dde3e Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Tue, 26 May 2015 11:32:14 -0700
Subject: [PATCH] wrap long lines, and tolerate various-width wrappings of the
 --help output

test_cli.Help was too sensitive to the way that the --help output was
wrapped, which caused failures on travis when COLUMNS= was set low and
the expected strings were split across separate lines.
---
 src/allmydata/scripts/startstop_node.py | 27 +++++++++++++++----------
 src/allmydata/test/test_cli.py          | 17 ++++++++++------
 2 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/src/allmydata/scripts/startstop_node.py b/src/allmydata/scripts/startstop_node.py
index b1aad6ac..e3b2e72c 100644
--- a/src/allmydata/scripts/startstop_node.py
+++ b/src/allmydata/scripts/startstop_node.py
@@ -11,22 +11,26 @@ from allmydata.util.encodingutil import listdir_unicode, quote_local_unicode_pat
 class StartOptions(BasedirOptions):
     subcommand_name = "start"
     optParameters = [
-        ("basedir", "C", None, "Specify which Tahoe base directory should be used. This has the same effect as the global --node-directory option. [default: %s]"
-         % quote_local_unicode_path(_default_nodedir)),
+        ("basedir", "C", None,
+         "Specify which Tahoe base directory should be used."
+         " This has the same effect as the global --node-directory option."
+         " [default: %s]" % quote_local_unicode_path(_default_nodedir)),
         ]
 
     def parseArgs(self, basedir=None, *twistd_args):
         # This can't handle e.g. 'tahoe start --nodaemon', since '--nodaemon'
-        # looks like an option to the tahoe subcommand, not to twistd.
-        # So you can either use 'tahoe start' or 'tahoe start NODEDIR --TWISTD-OPTIONS'.
-        # Note that 'tahoe --node-directory=NODEDIR start --TWISTD-OPTIONS' also
-        # isn't allowed, unfortunately.
+        # looks like an option to the tahoe subcommand, not to twistd. So you
+        # can either use 'tahoe start' or 'tahoe start NODEDIR
+        # --TWISTD-OPTIONS'. Note that 'tahoe --node-directory=NODEDIR start
+        # --TWISTD-OPTIONS' also isn't allowed, unfortunately.
 
         BasedirOptions.parseArgs(self, basedir)
         self.twistd_args = twistd_args
 
     def getSynopsis(self):
-        return "Usage:  %s [global-options] %s [options] [NODEDIR [twistd-options]]" % (self.command_name, self.subcommand_name)
+        return ("Usage:  %s [global-options] %s [options]"
+                " [NODEDIR [twistd-options]]"
+                % (self.command_name, self.subcommand_name))
 
     def getUsage(self, width=None):
         t = BasedirOptions.getUsage(self, width) + "\n"
@@ -45,7 +49,8 @@ class StopOptions(BasedirOptions):
         BasedirOptions.parseArgs(self, basedir)
 
     def getSynopsis(self):
-        return "Usage:  %s [global-options] stop [options] [NODEDIR]" % (self.command_name,)
+        return ("Usage:  %s [global-options] stop [options] [NODEDIR]"
+                % (self.command_name,))
 
 class RestartOptions(StartOptions):
     subcommand_name = "restart"
@@ -235,9 +240,9 @@ def restart(config, stdout, stderr):
 
 def run(config, stdout, stderr):
     config.twistd_args = config.twistd_args + ("--nodaemon",)
-    # Previously we would do the equivalent of adding ("--logfile", "tahoesvc.log"),
-    # but that redirects stdout/stderr which is often unhelpful, and the user can
-    # add that option explicitly if they want.
+    # Previously we would do the equivalent of adding ("--logfile",
+    # "tahoesvc.log"), but that redirects stdout/stderr which is often
+    # unhelpful, and the user can add that option explicitly if they want.
 
     return start(config, stdout, stderr)
 
diff --git a/src/allmydata/test/test_cli.py b/src/allmydata/test/test_cli.py
index 3caf7687..5d398149 100644
--- a/src/allmydata/test/test_cli.py
+++ b/src/allmydata/test/test_cli.py
@@ -561,6 +561,11 @@ class CLI(CLITestMixin, unittest.TestCase):
 
 
 class Help(unittest.TestCase):
+    def failUnlessInNormalized(self, x, y):
+        # helper function to deal with the --help output being wrapped to
+        # various widths, depending on the $COLUMNS environment variable
+        self.failUnlessIn(x.replace("\n", " "), y.replace("\n", " "))
+
     def test_get(self):
         help = str(cli.GetOptions())
         self.failUnlessIn("[options] REMOTE_FILE LOCAL_FILE", help)
@@ -586,22 +591,22 @@ class Help(unittest.TestCase):
     def test_mv(self):
         help = str(cli.MvOptions())
         self.failUnlessIn("[options] FROM TO", help)
-        self.failUnlessIn("Use 'tahoe mv' to move files", help)
+        self.failUnlessInNormalized("Use 'tahoe mv' to move files", help)
 
     def test_cp(self):
         help = str(cli.CpOptions())
         self.failUnlessIn("[options] FROM.. TO", help)
-        self.failUnlessIn("Use 'tahoe cp' to copy files", help)
+        self.failUnlessInNormalized("Use 'tahoe cp' to copy files", help)
 
     def test_ln(self):
         help = str(cli.LnOptions())
         self.failUnlessIn("[options] FROM_LINK TO_LINK", help)
-        self.failUnlessIn("Use 'tahoe ln' to duplicate a link", help)
+        self.failUnlessInNormalized("Use 'tahoe ln' to duplicate a link", help)
 
     def test_mkdir(self):
         help = str(cli.MakeDirectoryOptions())
         self.failUnlessIn("[options] [REMOTE_DIR]", help)
-        self.failUnlessIn("Create a new directory", help)
+        self.failUnlessInNormalized("Create a new directory", help)
 
     def test_backup(self):
         help = str(cli.BackupOptions())
@@ -670,13 +675,13 @@ class Help(unittest.TestCase):
     def test_debug_trial(self):
         help = str(debug.TrialOptions())
         self.failUnlessIn(" [global-options] debug trial [options] [[file|package|module|TestCase|testmethod]...]", help)
-        self.failUnlessIn("The 'tahoe debug trial' command uses the correct imports", help)
+        self.failUnlessInNormalized("The 'tahoe debug trial' command uses the correct imports", help)
 
     def test_debug_flogtool(self):
         options = debug.FlogtoolOptions()
         help = str(options)
         self.failUnlessIn(" [global-options] debug flogtool ", help)
-        self.failUnlessIn("The 'tahoe debug flogtool' command uses the correct imports", help)
+        self.failUnlessInNormalized("The 'tahoe debug flogtool' command uses the correct imports", help)
 
         for (option, shortcut, oClass, desc) in options.subCommands:
             subhelp = str(oClass())
-- 
2.45.2