All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] Refactor and improve full help output from tools
@ 2021-09-08 11:25 Paul Barker
  2021-09-08 11:25 ` [PATCH v3 1/2] tools: Refactor full help printing Paul Barker
  2021-09-08 11:25 ` [PATCH v3 2/2] tools: Handle PAGER containing arguments Paul Barker
  0 siblings, 2 replies; 3+ messages in thread
From: Paul Barker @ 2021-09-08 11:25 UTC (permalink / raw)
  To: Simon Glass, Tom Rini, u-boot; +Cc: Paul Barker

Changes from v2:
  * Handle the case where `PAGER` is unset. For some absolutely crazy reason
    `shlex.split(None)` reads the string to split from stdin so we need to
    ensure that `os.getenv()` returns an empty string instead of None if `PAGER`
    is unset.

Changes from v1:
  * Collected the full help printing code from patman, buildman & binman into a
    single function so that when support for PAGER containing arguments is added
    it applies to all the relevant tools.

Paul Barker (2):
  tools: Refactor full help printing
  tools: Handle PAGER containing arguments

 tools/binman/control.py   |  9 +++------
 tools/buildman/control.py | 10 ++++------
 tools/patman/main.py      | 12 ++++--------
 tools/patman/tools.py     | 14 ++++++++++++++
 4 files changed, 25 insertions(+), 20 deletions(-)

-- 
2.33.0


^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v3 1/2] tools: Refactor full help printing
  2021-09-08 11:25 [PATCH v3 0/2] Refactor and improve full help output from tools Paul Barker
@ 2021-09-08 11:25 ` Paul Barker
  2021-09-08 11:25 ` [PATCH v3 2/2] tools: Handle PAGER containing arguments Paul Barker
  1 sibling, 0 replies; 3+ messages in thread
From: Paul Barker @ 2021-09-08 11:25 UTC (permalink / raw)
  To: Simon Glass, Tom Rini, u-boot; +Cc: Paul Barker

Collect the code for printing the full help message of patman, buildman
and binman into a single function in patman.tools.

Signed-off-by: Paul Barker <paul.barker@sancloud.com>
---
 tools/binman/control.py   |  9 +++------
 tools/buildman/control.py | 10 ++++------
 tools/patman/main.py      | 12 ++++--------
 tools/patman/tools.py     | 13 +++++++++++++
 4 files changed, 24 insertions(+), 20 deletions(-)

diff --git a/tools/binman/control.py b/tools/binman/control.py
index dcba02ff7f8a..0dbcbc28e991 100644
--- a/tools/binman/control.py
+++ b/tools/binman/control.py
@@ -565,12 +565,9 @@ def Binman(args):
     global state
 
     if args.full_help:
-        pager = os.getenv('PAGER')
-        if not pager:
-            pager = 'more'
-        fname = os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])),
-                            'README.rst')
-        command.Run(pager, fname)
+        tools.PrintFullHelp(
+            os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), 'README.rst')
+        )
         return 0
 
     # Put these here so that we can import this module without libfdt
diff --git a/tools/buildman/control.py b/tools/buildman/control.py
index a98d1b4c06f3..fd9664c85d88 100644
--- a/tools/buildman/control.py
+++ b/tools/buildman/control.py
@@ -16,6 +16,7 @@ from patman import command
 from patman import gitutil
 from patman import patchstream
 from patman import terminal
+from patman import tools
 from patman.terminal import Print
 
 def GetPlural(count):
@@ -133,12 +134,9 @@ def DoBuildman(options, args, toolchains=None, make_func=None, boards=None,
     global builder
 
     if options.full_help:
-        pager = os.getenv('PAGER')
-        if not pager:
-            pager = 'more'
-        fname = os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])),
-                             'README')
-        command.Run(pager, fname)
+        tools.PrintFullHelp(
+            os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), 'README')
+        )
         return 0
 
     gitutil.Setup()
diff --git a/tools/patman/main.py b/tools/patman/main.py
index 04e37a593139..e5be28e3316c 100755
--- a/tools/patman/main.py
+++ b/tools/patman/main.py
@@ -28,6 +28,7 @@ from patman import settings
 from patman import terminal
 from patman import test_util
 from patman import test_checkpatch
+from patman import tools
 
 epilog = '''Create patches from commits in a branch, check them and email them
 as specified by tags you place in the commits. Use -n to do a dry run first.'''
@@ -170,14 +171,9 @@ elif args.cmd == 'send':
         fd.close()
 
     elif args.full_help:
-        pager = os.getenv('PAGER')
-        if not pager:
-            pager = shutil.which('less')
-        if not pager:
-            pager = 'more'
-        fname = os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])),
-                             'README')
-        command.Run(pager, fname)
+        tools.PrintFullHelp(
+            os.path.join(os.path.dirname(os.path.realpath(sys.argv[0])), 'README')
+        )
 
     else:
         # If we are not processing tags, no need to warning about bad ones
diff --git a/tools/patman/tools.py b/tools/patman/tools.py
index 877e37cd8da1..96882264a2f9 100644
--- a/tools/patman/tools.py
+++ b/tools/patman/tools.py
@@ -581,3 +581,16 @@ def ToHexSize(val):
         hex value of size, or 'None' if the value is None
     """
     return 'None' if val is None else '%#x' % len(val)
+
+def PrintFullHelp(fname):
+    """Print the full help message for a tool using an appropriate pager.
+
+    Args:
+        fname: Path to a file containing the full help message
+    """
+    pager = os.getenv('PAGER')
+    if not pager:
+        pager = shutil.which('less')
+    if not pager:
+        pager = 'more'
+    command.Run(pager, fname)
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v3 2/2] tools: Handle PAGER containing arguments
  2021-09-08 11:25 [PATCH v3 0/2] Refactor and improve full help output from tools Paul Barker
  2021-09-08 11:25 ` [PATCH v3 1/2] tools: Refactor full help printing Paul Barker
@ 2021-09-08 11:25 ` Paul Barker
  1 sibling, 0 replies; 3+ messages in thread
From: Paul Barker @ 2021-09-08 11:25 UTC (permalink / raw)
  To: Simon Glass, Tom Rini, u-boot; +Cc: Paul Barker

When printing full help output from a tool, we should be able to handle
a PAGER variable which includes arguments, e.g. PAGER='less -F'.

Signed-off-by: Paul Barker <paul.barker@sancloud.com>
---
 tools/patman/tools.py | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/tools/patman/tools.py b/tools/patman/tools.py
index 96882264a2f9..4f1c4bae2867 100644
--- a/tools/patman/tools.py
+++ b/tools/patman/tools.py
@@ -5,6 +5,7 @@
 
 import glob
 import os
+import shlex
 import shutil
 import struct
 import sys
@@ -588,9 +589,9 @@ def PrintFullHelp(fname):
     Args:
         fname: Path to a file containing the full help message
     """
-    pager = os.getenv('PAGER')
+    pager = shlex.split(os.getenv('PAGER', ''))
     if not pager:
-        pager = shutil.which('less')
+        pager = [shutil.which('less')]
     if not pager:
-        pager = 'more'
-    command.Run(pager, fname)
+        pager = ['more']
+    command.Run(*pager, fname)
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-09-08 11:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-08 11:25 [PATCH v3 0/2] Refactor and improve full help output from tools Paul Barker
2021-09-08 11:25 ` [PATCH v3 1/2] tools: Refactor full help printing Paul Barker
2021-09-08 11:25 ` [PATCH v3 2/2] tools: Handle PAGER containing arguments Paul Barker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.