diff options
-rw-r--r-- | release/update_manpages.py | 35 | ||||
-rwxr-xr-x | run_tests | 15 |
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 | |||
27 | import subprocess | 27 | import subprocess |
28 | import sys | 28 | import sys |
29 | import tempfile | 29 | import tempfile |
30 | from typing import List | ||
30 | 31 | ||
31 | 32 | ||
32 | TOPDIR = Path(__file__).resolve().parent.parent | 33 | THIS_FILE = Path(__file__).resolve() |
34 | TOPDIR = THIS_FILE.parent.parent | ||
33 | MANDIR = TOPDIR.joinpath("man") | 35 | MANDIR = 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 | ||
45 | def main(argv): | 47 | def 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 | |||
61 | def 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 | ||
139 | def replace_regex(data): | 166 | def replace_regex(data): |
@@ -17,6 +17,7 @@ | |||
17 | 17 | ||
18 | import functools | 18 | import functools |
19 | import os | 19 | import os |
20 | import shutil | ||
20 | import subprocess | 21 | import subprocess |
21 | import sys | 22 | import sys |
22 | from typing import List | 23 | from typing import List |
@@ -101,6 +102,19 @@ def run_isort(): | |||
101 | ).returncode | 102 | ).returncode |
102 | 103 | ||
103 | 104 | ||
105 | def 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 | |||
104 | def main(argv): | 118 | def 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. |