diff options
author | Florian Bruhin <me@the-compiler.org> | 2022-03-30 11:28:43 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2022-03-30 11:55:57 +0200 |
commit | ac2cb6bb303ceec8429b084cdf372a6c8584d780 (patch) | |
tree | 2cea57d86b5601e163ede9b96b71b3f128111e1b | |
parent | 9a5e9b328ee3a187b06b8445ae8c53c00f83e284 (diff) | |
download | qutebrowser-ac2cb6bb303ceec8429b084cdf372a6c8584d780.tar.gz qutebrowser-ac2cb6bb303ceec8429b084cdf372a6c8584d780.zip |
scripts: Show requirement name in table output
-rw-r--r-- | scripts/dev/recompile_requirements.py | 49 |
1 files changed, 32 insertions, 17 deletions
diff --git a/scripts/dev/recompile_requirements.py b/scripts/dev/recompile_requirements.py index 97740e126..5f4ca8432 100644 --- a/scripts/dev/recompile_requirements.py +++ b/scripts/dev/recompile_requirements.py @@ -188,10 +188,11 @@ class Change: """A single requirements change from a git diff output.""" - def __init__(self, name): + def __init__(self, name: str, base_path: pathlib.Path) -> None: self.name = name self.old = None self.new = None + self.base = extract_requirement_name(base_path) if CHANGELOG_URLS.get(name): self.url = CHANGELOG_URLS[name] self.link = '[{}]({})'.format(self.name, self.url) @@ -200,23 +201,23 @@ class Change: self.link = self.name def __str__(self): + prefix = f"- [{self.base}] {self.name}" + suffix = f" {self.url}" if self.old is None: - return '- {} new: {} {}'.format(self.name, self.new, self.url) + return f"{prefix} new: {self.new} {suffix}" elif self.new is None: - return '- {} removed: {} {}'.format(self.name, self.old, - self.url) + return f"{prefix} removed: {self.old} {suffix}" else: - return '- {} {} -> {} {}'.format(self.name, self.old, self.new, - self.url) + return f"{prefix} {self.old} -> {self.new} {suffix}" def table_str(self): """Generate a markdown table.""" if self.old is None: - return '| {} | -- | {} |'.format(self.link, self.new) + return f'| {self.base} | {self.link} | -- | {self.new} |' elif self.new is None: - return '| {} | {} | -- |'.format(self.link, self.old) + return f'| {self.base} | {self.link} | {self.old} | -- |' else: - return '| {} | {} | {} |'.format(self.link, self.old, self.new) + return f'| {self.base} | {self.link} | {self.old} | {self.new} |' def _get_changed_files(): @@ -224,14 +225,19 @@ def _get_changed_files(): changed_files = set() filenames = git_diff('--name-only') for filename in filenames: - filename = filename.strip() - filename = filename.replace('misc/requirements/requirements-', '') - filename = filename.replace('.txt', '') - changed_files.add(filename) + requirement_name = extract_requirement_name(pathlib.Path(filename)) + changed_files.add(requirement_name) return sorted(changed_files) +def extract_requirement_name(path: pathlib.Path) -> str: + prefix = "requirements-" + assert path.suffix == ".txt", path + assert path.stem.startswith(prefix), path + return path.stem[len(prefix):] + + def parse_versioned_line(line): """Parse a requirements.txt line into name/version.""" if line[0] == '#': # ignored dependency @@ -265,10 +271,19 @@ def parse_versioned_line(line): def _get_changes(diff): """Get a list of changed versions from git.""" changes_dict = {} + current_path = None + for line in diff: if not line.startswith('-') and not line.startswith('+'): continue - elif line.startswith('+++ ') or line.startswith('--- '): + elif line.startswith('--- '): + prefix = '--- a/' + current_path = pathlib.Path(line[len(prefix):]) + continue + elif line.startswith('+++ '): + prefix = '+++ b/' + new_path = pathlib.Path(line[len(prefix):]) + assert current_path == new_path, (current_path, new_path) continue elif not line.strip(): # Could be newline changes on Windows @@ -280,7 +295,7 @@ def _get_changes(diff): name, version = parse_versioned_line(line[1:]) if name not in changes_dict: - changes_dict[name] = Change(name) + changes_dict[name] = Change(name, base_path=current_path) if line.startswith('-'): changes_dict[name].old = version @@ -314,8 +329,8 @@ def print_changed_files(): print('::set-output name=changed::' + files_text.replace('\n', '%0A')) table_header = [ - '| Requirement | old | new |', - '|-------------|-----|-----|', + '| File | Requirement | old | new |', + '|------|-------------|-----|-----|', ] diff_table = '%0A'.join(table_header + [change.table_str() for change in changes]) |