|
| 1 | +from __future__ import annotations |
| 2 | + |
1 | 3 | import os
|
2 | 4 | import re
|
| 5 | +import subprocess |
3 | 6 | from pathlib import Path
|
4 |
| -from typing import List |
| 7 | +from typing import DefaultDict, List, Tuple |
5 | 8 |
|
6 | 9 | import nox
|
7 | 10 | from nox.sessions import Session
|
@@ -146,6 +149,46 @@ def test_docs(session: Session) -> None:
|
146 | 149 | session.run("sphinx-build", "-b", "doctest", "docs/source", "docs/build")
|
147 | 150 |
|
148 | 151 |
|
| 152 | +@nox.session |
| 153 | +def commits_since_last_tag(session: Session) -> None: |
| 154 | + sha_format_in_rst = "--sha-format=rst" in session.posargs |
| 155 | + |
| 156 | + latest_tag = ( |
| 157 | + subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"]) |
| 158 | + .decode() |
| 159 | + .strip() |
| 160 | + ) |
| 161 | + commit_references = ( |
| 162 | + subprocess.check_output( |
| 163 | + ["git", "log", "--pretty=reference", f"{latest_tag}..HEAD"] |
| 164 | + ) |
| 165 | + .decode() |
| 166 | + .strip() |
| 167 | + .split("\n") |
| 168 | + ) |
| 169 | + |
| 170 | + commits: List[Tuple[str, str, str]] = [] |
| 171 | + for commit_ref in commit_references: |
| 172 | + commit_sha, remainder = commit_ref.split(" ", 1) |
| 173 | + commit_message, commit_date = remainder[1:-1].rsplit(", ", 1) |
| 174 | + commits.append((commit_sha, commit_message, commit_date)) |
| 175 | + |
| 176 | + commits_by_date: DefaultDict[str, List[str]] = DefaultDict(list) |
| 177 | + for sha, msg, date in commits: |
| 178 | + if sha_format_in_rst: |
| 179 | + sha_repr = f"`{sha} <https://github.com/idom-team/idom/commit/{sha}>`__" |
| 180 | + else: |
| 181 | + sha_repr = sha |
| 182 | + commits_by_date[date].append(f"{msg} {sha_repr}") |
| 183 | + |
| 184 | + for date, commits in commits_by_date.items(): |
| 185 | + print(f"Commits on {date}") |
| 186 | + print() |
| 187 | + for cmt in commits: |
| 188 | + print("-", cmt) |
| 189 | + print() |
| 190 | + |
| 191 | + |
149 | 192 | def install_idom_dev(session: Session, extras: str = "stable") -> None:
|
150 | 193 | session.install("-e", f".[{extras}]")
|
151 | 194 | if "--no-restore" not in session.posargs:
|
|
0 commit comments