summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--release/update_manpages.py35
-rwxr-xr-xrun_tests15
2 files changed, 46 insertions, 4 deletions
diff --git a/release/update_manpages.py b/release/update_manpages.py
index 489de357..9ada83ff 100644
--- a/release/update_manpages.py
+++ b/release/update_manpages.py
@@ -27,9 +27,11 @@ import shutil
27import subprocess 27import subprocess
28import sys 28import sys
29import tempfile 29import tempfile
30from typing import List
30 31
31 32
32TOPDIR = Path(__file__).resolve().parent.parent 33THIS_FILE = Path(__file__).resolve()
34TOPDIR = THIS_FILE.parent.parent
33MANDIR = TOPDIR.joinpath("man") 35MANDIR = TOPDIR.joinpath("man")
34 36
35# Load repo local modules. 37# Load repo local modules.
@@ -42,9 +44,23 @@ def worker(cmd, **kwargs):
42 subprocess.run(cmd, **kwargs) 44 subprocess.run(cmd, **kwargs)
43 45
44 46
45def main(argv): 47def get_parser() -> argparse.ArgumentParser:
48 """Get argument parser."""
46 parser = argparse.ArgumentParser(description=__doc__) 49 parser = argparse.ArgumentParser(description=__doc__)
47 parser.parse_args(argv) 50 parser.add_argument(
51 "-n",
52 "--check",
53 "--dry-run",
54 action="store_const",
55 const=True,
56 help="Check if changes are necessary; don't actually change files",
57 )
58 return parser
59
60
61def main(argv: List[str]) -> int:
62 parser = get_parser()
63 opts = parser.parse_args(argv)
48 64
49 if not shutil.which("help2man"): 65 if not shutil.which("help2man"):
50 sys.exit("Please install help2man to continue.") 66 sys.exit("Please install help2man to continue.")
@@ -117,6 +133,7 @@ def main(argv):
117 functools.partial(worker, cwd=tempdir, check=True), cmdlist 133 functools.partial(worker, cwd=tempdir, check=True), cmdlist
118 ) 134 )
119 135
136 ret = 0
120 for tmp_path in MANDIR.glob("*.1.tmp"): 137 for tmp_path in MANDIR.glob("*.1.tmp"):
121 path = tmp_path.parent / tmp_path.stem 138 path = tmp_path.parent / tmp_path.stem
122 old_data = path.read_text() if path.exists() else "" 139 old_data = path.read_text() if path.exists() else ""
@@ -133,7 +150,17 @@ def main(argv):
133 ) 150 )
134 new_data = re.sub(r'^(\.TH REPO "1" ")([^"]+)', r"\1", data, flags=re.M) 151 new_data = re.sub(r'^(\.TH REPO "1" ")([^"]+)', r"\1", data, flags=re.M)
135 if old_data != new_data: 152 if old_data != new_data:
136 path.write_text(data) 153 if opts.check:
154 ret = 1
155 print(
156 f"{THIS_FILE.name}: {path.name}: "
157 "man page needs regenerating",
158 file=sys.stderr,
159 )
160 else:
161 path.write_text(data)
162
163 return ret
137 164
138 165
139def replace_regex(data): 166def replace_regex(data):
diff --git a/run_tests b/run_tests
index d64cc700..ea34e675 100755
--- a/run_tests
+++ b/run_tests
@@ -17,6 +17,7 @@
17 17
18import functools 18import functools
19import os 19import os
20import shutil
20import subprocess 21import subprocess
21import sys 22import sys
22from typing import List 23from typing import List
@@ -101,6 +102,19 @@ def run_isort():
101 ).returncode 102 ).returncode
102 103
103 104
105def run_update_manpages() -> int:
106 """Returns the exit code from release/update-manpages."""
107 if not shutil.which("help2mafn"):
108 print("update-manpages: help2man not found; skipping test")
109 return 0
110
111 return subprocess.run(
112 [sys.executable, "release/update-manpages", "--check"],
113 check=False,
114 cwd=ROOT_DIR,
115 ).returncode
116
117
104def main(argv): 118def main(argv):
105 """The main entry.""" 119 """The main entry."""
106 checks = ( 120 checks = (
@@ -109,6 +123,7 @@ def main(argv):
109 run_black, 123 run_black,
110 run_flake8, 124 run_flake8,
111 run_isort, 125 run_isort,
126 run_update_manpages,
112 ) 127 )
113 # Run all the tests all the time to get full feedback. Don't exit on the 128 # Run all the tests all the time to get full feedback. Don't exit on the
114 # first error as that makes it more difficult to iterate in the CQ. 129 # first error as that makes it more difficult to iterate in the CQ.