diff --git a/release/update-manpages b/release/update-manpages index d619cf0b..739cedb1 100755 --- a/release/update-manpages +++ b/release/update-manpages @@ -83,11 +83,6 @@ def main(argv): with multiprocessing.Pool() as pool: pool.map(partial(worker, cwd=tempdir, check=True), cmdlist) - regex = ( - (r'(It was generated by help2man) [0-9.]+', '\g<1>.'), - (r'^\.IP\n(.*:)\n', '.SS \g<1>\n'), - (r'^\.PP\nDescription', '.SH DETAILS'), - ) for tmp_path in MANDIR.glob('*.1.tmp'): path = tmp_path.parent / tmp_path.stem old_data = path.read_text() if path.exists() else '' @@ -95,8 +90,7 @@ def main(argv): data = tmp_path.read_text() tmp_path.unlink() - for pattern, replacement in regex: - data = re.sub(pattern, replacement, data, flags=re.M) + data = replace_regex(data) # If the only thing that changed was the date, don't refresh. This avoids # a lot of noise when only one file actually updates. @@ -106,5 +100,25 @@ def main(argv): path.write_text(data) +def replace_regex(data): + """Replace semantically null regexes in the data. + + Args: + data: manpage text. + + Returns: + Updated manpage text. + """ + regex = ( + (r'(It was generated by help2man) [0-9.]+', '\g<1>.'), + (r'^\033\[[0-9;]*m([^\033]*)\033\[m', '\g<1>'), + (r'^\.IP\n(.*:)\n', '.SS \g<1>\n'), + (r'^\.PP\nDescription', '.SH DETAILS'), + ) + for pattern, replacement in regex: + data = re.sub(pattern, replacement, data, flags=re.M) + return data + + if __name__ == '__main__': sys.exit(main(sys.argv[1:])) diff --git a/tests/test_update_manpages.py b/tests/test_update_manpages.py new file mode 100644 index 00000000..f0ef72af --- /dev/null +++ b/tests/test_update_manpages.py @@ -0,0 +1,27 @@ +# Copyright 2022 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Unittests for the update_manpages module.""" + +import unittest +import tests.update_manpages as um + + +class UpdateManpagesTest(unittest.TestCase): + """Tests the update-manpages code.""" + + def test_replace_regex(self): + """Check that replace_regex works.""" + data = '\n\033[1mSummary\033[m\n' + self.assertEqual(um.replace_regex(data),'\nSummary\n') diff --git a/tests/update_manpages.py b/tests/update_manpages.py new file mode 120000 index 00000000..40bbdea7 --- /dev/null +++ b/tests/update_manpages.py @@ -0,0 +1 @@ +update-manpages \ No newline at end of file