From 6e228e371bea73db25077ed57c4d86130962f94f Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 29 Jan 2024 20:26:33 +0100 Subject: [PATCH] scripts/gendocs.py: make it work remove unused html_write function gendocs: update developer docs --- docs/development.rst | 10 +++++--- scripts/gendocs.py | 60 +++++++++++++++++++++++--------------------- 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/docs/development.rst b/docs/development.rst index 280349a6b..50a1656a5 100644 --- a/docs/development.rst +++ b/docs/development.rst @@ -220,8 +220,8 @@ for easier use by packagers downstream. When a command is added, a command line flag changed, added or removed, the usage docs need to be rebuilt as well:: - python setup.py build_usage - python setup.py build_man + python scripts/gendocs.py build_usage + python scripts/gendocs.py build_man However, we prefer to do this as part of our :ref:`releasing` preparations, so it is generally not necessary to update these when @@ -311,7 +311,11 @@ Checklist: - Check version number of upcoming release in ``CHANGES.rst``. - Render ``CHANGES.rst`` via ``make html`` and check for markup errors. - Verify that ``MANIFEST.in``, ``pyproject.toml`` and ``setup.py`` are complete. -- ``python setup.py build_usage ; python setup.py build_man`` and commit. +- Run these commands and commit:: + + python scripts/gendocs.py build_usage + python scripts/gendocs.py build_man + - Tag the release:: git tag -s -m "tagged/signed release X.Y.Z" X.Y.Z diff --git a/scripts/gendocs.py b/scripts/gendocs.py index d937607e6..d8ee3b4b7 100644 --- a/scripts/gendocs.py +++ b/scripts/gendocs.py @@ -9,8 +9,6 @@ from collections import OrderedDict from datetime import datetime, timezone import time -from setuptools import Command - def format_metavar(option): if option.nargs in ('*', '...'): @@ -23,18 +21,8 @@ def format_metavar(option): raise ValueError(f'Can\'t format metavar {option.metavar}, unknown nargs {option.nargs}!') -class build_usage(Command): - description = "generate usage for each command" - - user_options = [ - ('output=', 'O', 'output directory'), - ] - - def initialize_options(self): - pass - - def finalize_options(self): - pass +class BuildUsage: + """generate usage docs for each command""" def run(self): print('generating usage docs') @@ -50,6 +38,7 @@ class build_usage(Command): #borgfs_parser = Archiver(prog='borgfs').build_parser() self.generate_level("", parser, Archiver) + return 0 def generate_level(self, prefix, parser, Archiver, extra_choices=None): is_subcommand = False @@ -119,10 +108,6 @@ class build_usage(Command): # HTML output: # A table using some column-spans - def html_write(s): - for line in s.splitlines(): - fp.write(' ' + line + '\n') - rows = [] for group in parser._action_groups: if group.title == 'Common options': @@ -257,10 +242,8 @@ class build_usage(Command): fp.write(indent + option.ljust(padding) + desc + '\n') -class build_man(Command): - description = 'build man pages' - - user_options = [] +class BuildMan: + """build man pages""" see_also = { 'create': ('delete', 'prune', 'check', 'patterns', 'placeholders', 'compression'), @@ -301,12 +284,6 @@ class build_man(Command): 'umount': 'mount', } - def initialize_options(self): - pass - - def finalize_options(self): - pass - def run(self): print('building man pages (in docs/man)', file=sys.stderr) import borg @@ -320,6 +297,7 @@ class build_man(Command): self.generate_level('', parser, Archiver, {'borgfs': borgfs_parser}) self.build_topic_pages(Archiver) self.build_intro_page() + return 0 def generate_level(self, prefix, parser, Archiver, extra_choices=None): is_subcommand = False @@ -538,3 +516,29 @@ class build_man(Command): for option, desc in opts.items(): write(option.ljust(padding), desc) + + +def usage(): + print(textwrap.dedent(""" + Usage: + python scripts/gendocs.py build_usage # build usage documentation + python scripts/gendocs.py build_man # build man pages + """)) + + +def main(argv): + if len(argv) < 2 or len(argv) == 2 and argv[1] in ("-h", "--help"): + usage() + return 0 + command = argv[1] + if command == "build_usage": + return BuildUsage().run() + if command == "build_man": + return BuildMan().run() + usage() + return 1 + + +if __name__ == '__main__': + rc = main(sys.argv) + sys.exit(rc)