From ea2e330e43c182dc16b0111ebc69ee5a71ee4ce1 Mon Sep 17 00:00:00 2001 From: Gavin Mak Date: Sat, 11 Mar 2023 06:46:20 +0000 Subject: Format codebase with black and check formatting in CQ Apply rules set by https://gerrit-review.googlesource.com/c/git-repo/+/362954/ across the codebase and fix any lingering errors caught by flake8. Also check black formatting in run_tests (and CQ). Bug: b/267675342 Change-Id: I972d77649dac351150dcfeb1cd1ad0ea2efc1956 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/363474 Reviewed-by: Mike Frysinger Tested-by: Gavin Mak Commit-Queue: Gavin Mak --- release/update_manpages.py | 186 +++++++++++++++++++++++++++------------------ 1 file changed, 110 insertions(+), 76 deletions(-) (limited to 'release/update_manpages.py') diff --git a/release/update_manpages.py b/release/update_manpages.py index d1bf8928..cd2acc01 100644 --- a/release/update_manpages.py +++ b/release/update_manpages.py @@ -29,91 +29,125 @@ import sys import tempfile TOPDIR = Path(__file__).resolve().parent.parent -MANDIR = TOPDIR.joinpath('man') +MANDIR = TOPDIR.joinpath("man") # Load repo local modules. sys.path.insert(0, str(TOPDIR)) from git_command import RepoSourceVersion import subcmds + def worker(cmd, **kwargs): - subprocess.run(cmd, **kwargs) + subprocess.run(cmd, **kwargs) + def main(argv): - parser = argparse.ArgumentParser(description=__doc__) - opts = parser.parse_args(argv) - - if not shutil.which('help2man'): - sys.exit('Please install help2man to continue.') - - # Let repo know we're generating man pages so it can avoid some dynamic - # behavior (like probing active number of CPUs). We use a weird name & - # value to make it less likely for users to set this var themselves. - os.environ['_REPO_GENERATE_MANPAGES_'] = ' indeed! ' - - # "repo branch" is an alias for "repo branches". - del subcmds.all_commands['branch'] - (MANDIR / 'repo-branch.1').write_text('.so man1/repo-branches.1') - - version = RepoSourceVersion() - cmdlist = [['help2man', '-N', '-n', f'repo {cmd} - manual page for repo {cmd}', - '-S', f'repo {cmd}', '-m', 'Repo Manual', f'--version-string={version}', - '-o', MANDIR.joinpath(f'repo-{cmd}.1.tmp'), './repo', - '-h', f'help {cmd}'] for cmd in subcmds.all_commands] - cmdlist.append(['help2man', '-N', '-n', 'repository management tool built on top of git', - '-S', 'repo', '-m', 'Repo Manual', f'--version-string={version}', - '-o', MANDIR.joinpath('repo.1.tmp'), './repo', - '-h', '--help-all']) - - with tempfile.TemporaryDirectory() as tempdir: - tempdir = Path(tempdir) - repo_dir = tempdir / '.repo' - repo_dir.mkdir() - (repo_dir / 'repo').symlink_to(TOPDIR) - - # Create a repo wrapper using the active Python executable. We can't pass - # this directly to help2man as it's too simple, so insert it via shebang. - data = (TOPDIR / 'repo').read_text(encoding='utf-8') - tempbin = tempdir / 'repo' - tempbin.write_text(f'#!{sys.executable}\n' + data, encoding='utf-8') - tempbin.chmod(0o755) - - # Run all cmd in parallel, and wait for them to finish. - with multiprocessing.Pool() as pool: - pool.map(partial(worker, cwd=tempdir, check=True), cmdlist) - - for tmp_path in MANDIR.glob('*.1.tmp'): - path = tmp_path.parent / tmp_path.stem - old_data = path.read_text() if path.exists() else '' - - data = tmp_path.read_text() - tmp_path.unlink() - - 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. - old_data = re.sub(r'^(\.TH REPO "1" ")([^"]+)', r'\1', old_data, flags=re.M) - new_data = re.sub(r'^(\.TH REPO "1" ")([^"]+)', r'\1', data, flags=re.M) - if old_data != new_data: - path.write_text(data) + parser = argparse.ArgumentParser(description=__doc__) + parser.parse_args(argv) + + if not shutil.which("help2man"): + sys.exit("Please install help2man to continue.") + + # Let repo know we're generating man pages so it can avoid some dynamic + # behavior (like probing active number of CPUs). We use a weird name & + # value to make it less likely for users to set this var themselves. + os.environ["_REPO_GENERATE_MANPAGES_"] = " indeed! " + + # "repo branch" is an alias for "repo branches". + del subcmds.all_commands["branch"] + (MANDIR / "repo-branch.1").write_text(".so man1/repo-branches.1") + + version = RepoSourceVersion() + cmdlist = [ + [ + "help2man", + "-N", + "-n", + f"repo {cmd} - manual page for repo {cmd}", + "-S", + f"repo {cmd}", + "-m", + "Repo Manual", + f"--version-string={version}", + "-o", + MANDIR.joinpath(f"repo-{cmd}.1.tmp"), + "./repo", + "-h", + f"help {cmd}", + ] + for cmd in subcmds.all_commands + ] + cmdlist.append( + [ + "help2man", + "-N", + "-n", + "repository management tool built on top of git", + "-S", + "repo", + "-m", + "Repo Manual", + f"--version-string={version}", + "-o", + MANDIR.joinpath("repo.1.tmp"), + "./repo", + "-h", + "--help-all", + ] + ) + + with tempfile.TemporaryDirectory() as tempdir: + tempdir = Path(tempdir) + repo_dir = tempdir / ".repo" + repo_dir.mkdir() + (repo_dir / "repo").symlink_to(TOPDIR) + + # Create a repo wrapper using the active Python executable. We can't + # pass this directly to help2man as it's too simple, so insert it via + # shebang. + data = (TOPDIR / "repo").read_text(encoding="utf-8") + tempbin = tempdir / "repo" + tempbin.write_text(f"#!{sys.executable}\n" + data, encoding="utf-8") + tempbin.chmod(0o755) + + # Run all cmd in parallel, and wait for them to finish. + with multiprocessing.Pool() as pool: + pool.map(partial(worker, cwd=tempdir, check=True), cmdlist) + + for tmp_path in MANDIR.glob("*.1.tmp"): + path = tmp_path.parent / tmp_path.stem + old_data = path.read_text() if path.exists() else "" + + data = tmp_path.read_text() + tmp_path.unlink() + + 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. + old_data = re.sub( + r'^(\.TH REPO "1" ")([^"]+)', r"\1", old_data, flags=re.M + ) + new_data = re.sub(r'^(\.TH REPO "1" ")([^"]+)', r"\1", data, flags=re.M) + if old_data != new_data: + 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.]+', r'\g<1>.'), - (r'^\033\[[0-9;]*m([^\033]*)\033\[m', r'\g<1>'), - (r'^\.IP\n(.*:)\n', r'.SS \g<1>\n'), - (r'^\.PP\nDescription', r'.SH DETAILS'), - ) - for pattern, replacement in regex: - data = re.sub(pattern, replacement, data, flags=re.M) - return 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.]+", r"\g<1>."), + (r"^\033\[[0-9;]*m([^\033]*)\033\[m", r"\g<1>"), + (r"^\.IP\n(.*:)\n", r".SS \g<1>\n"), + (r"^\.PP\nDescription", r".SH DETAILS"), + ) + for pattern, replacement in regex: + data = re.sub(pattern, replacement, data, flags=re.M) + return data -- cgit v1.2.3-54-g00ecf