#!/usr/bin/env python3 # # update-tools-help.py - Update the command line help output in doc/wsug_src. # # Wireshark - Network traffic analyzer # By Gerald Combs # Copyright 1998 Gerald Combs # # SPDX-License-Identifier: GPL-2.0-or-later '''Update tools help For each file that matches doc/wsug_src/-.txt, run that command and flag. Update the file if the output differs. ''' import argparse import difflib import glob 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, '..', 'doc', 'wsug_src') tools_help_files = glob.glob(os.path.join(wsug_src_dir, '*-*.txt')) tools_help_files.sort() tool_pat = re.compile(r'(\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 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(r' \(v\d+\.\d+\.\d+', cur_lines[0])[0] new_lines[0] = re.split(r' \(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 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()