summaryrefslogtreecommitdiffstats
path: root/tools/update-tools-help.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 20:34:10 +0000
commite4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc (patch)
tree68cb5ef9081156392f1dd62a00c6ccc1451b93df /tools/update-tools-help.py
parentInitial commit. (diff)
downloadwireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.tar.xz
wireshark-e4ba6dbc3f1e76890b22773807ea37fe8fa2b1bc.zip
Adding upstream version 4.2.2.upstream/4.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tools/update-tools-help.py')
-rwxr-xr-xtools/update-tools-help.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/tools/update-tools-help.py b/tools/update-tools-help.py
new file mode 100755
index 0000000..f951e8e
--- /dev/null
+++ b/tools/update-tools-help.py
@@ -0,0 +1,82 @@
+#!/usr/bin/env python3
+#
+# update-tools-help.py - Update the command line help output in docbook/wsug_src.
+#
+# Wireshark - Network traffic analyzer
+# By Gerald Combs <gerald@wireshark.org>
+# Copyright 1998 Gerald Combs
+#
+# SPDX-License-Identifier: GPL-2.0-or-later
+'''Update tools help
+
+For each file that matches docbook/wsug_src/<command>-<flag>.txt, run
+that command and flag. Update the file if the output differs.
+'''
+
+import argparse
+import difflib
+import glob
+import io
+import os
+import re
+import subprocess
+import sys
+
+def main():
+ parser = argparse.ArgumentParser(description='Update Wireshark tools help')
+ parser.add_argument('-p', '--program-path', nargs=1, default=os.path.curdir, help='Path to Wireshark executables.')
+ args = parser.parse_args()
+
+ this_dir = os.path.dirname(__file__)
+ wsug_src_dir = os.path.join(this_dir, '..', 'docbook', 'wsug_src')
+
+ tools_help_files = glob.glob(os.path.join(wsug_src_dir, '*-*.txt'))
+ tools_help_files.sort()
+ tool_pat = re.compile('(\w+)(-\w).txt')
+
+ # If tshark is present, assume that our other executables are as well.
+ program_path = args.program_path[0]
+ if not os.path.isfile(os.path.join(program_path, 'tshark')):
+ print('tshark not found at {}\n'.format(program_path))
+ parser.print_usage()
+ sys.exit(1)
+
+ null_fd = open(os.devnull, 'w')
+
+ for thf in tools_help_files:
+ thf_base = os.path.basename(thf)
+ m = tool_pat.match(thf_base)
+ thf_command = os.path.join(program_path, m.group(1))
+ thf_flag = m.group(2)
+
+ if not os.path.isfile(thf_command):
+ print('{} not found. Skipping.'.format(thf_command))
+ continue
+
+ with io.open(thf, 'r', encoding='UTF-8') as fd:
+ cur_help = fd.read()
+
+ try:
+ new_help_data = subprocess.check_output((thf_command, thf_flag), stderr=null_fd)
+ except subprocess.CalledProcessError as e:
+ if thf_flag == '-h':
+ raise e
+
+ new_help = new_help_data.decode('UTF-8', 'replace')
+
+ cur_lines = cur_help.splitlines()
+ new_lines = new_help.splitlines()
+ # Assume we have an extended version. Strip it.
+ cur_lines[0] = re.split(' \(v\d+\.\d+\.\d+', cur_lines[0])[0]
+ new_lines[0] = re.split(' \(v\d+\.\d+\.\d+', new_lines[0])[0]
+ diff = list(difflib.unified_diff(cur_lines, new_lines))
+
+ if (len(diff) > 0):
+ print('Updating {} {}'.format(thf_command, thf_flag))
+ with io.open(thf, 'w', encoding='UTF-8') as fd:
+ fd.write(new_help)
+ else:
+ print('{} {} output unchanged.'.format(thf_command, thf_flag))
+
+if __name__ == '__main__':
+ main()