|
6 | 6 | import argparse |
7 | 7 | import os |
8 | 8 | from pathlib import Path |
| 9 | +import re |
9 | 10 | from subprocess import call |
10 | 11 | from subprocess import check_call |
11 | 12 | from subprocess import check_output |
|
16 | 17 |
|
17 | 18 | def announce(version: str, template_name: str, doc_version: str) -> None: |
18 | 19 | """Generates a new release announcement entry in the docs.""" |
19 | | - # Get our list of authors |
| 20 | + # Get our list of authors and co-authors. |
20 | 21 | stdout = check_output(["git", "describe", "--abbrev=0", "--tags"], encoding="UTF-8") |
21 | 22 | last_version = stdout.strip() |
| 23 | + rev_range = f"{last_version}..HEAD" |
22 | 24 |
|
23 | | - stdout = check_output( |
24 | | - ["git", "log", f"{last_version}..HEAD", "--format=%aN"], encoding="UTF-8" |
| 25 | + authors = check_output( |
| 26 | + ["git", "log", rev_range, "--format=%aN"], encoding="UTF-8" |
| 27 | + ).splitlines() |
| 28 | + |
| 29 | + co_authors_output = check_output( |
| 30 | + ["git", "log", rev_range, "--format=%(trailers:key=Co-authored-by) "], |
| 31 | + encoding="UTF-8", |
25 | 32 | ) |
| 33 | + co_authors: list[str] = [] |
| 34 | + for co_author_line in co_authors_output.splitlines(): |
| 35 | + if m := re.search(r"Co-authored-by: (.+?)<", co_author_line): |
| 36 | + co_authors.append(m.group(1).strip()) |
26 | 37 |
|
27 | 38 | contributors = { |
28 | 39 | name |
29 | | - for name in stdout.splitlines() |
| 40 | + for name in authors + co_authors |
30 | 41 | if not name.endswith("[bot]") and name != "pytest bot" |
31 | 42 | } |
32 | 43 |
|
|
0 commit comments