mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 16:07:30 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| """
 | |
| Sphinx extension to add timestamps to release notes based on Git versions.
 | |
| 
 | |
| Based on https://github.com/jaraco/rst.linker, with thanks to Jason R. Coombs.
 | |
| """
 | |
| 
 | |
| from __future__ import annotations
 | |
| 
 | |
| import re
 | |
| import subprocess
 | |
| from typing import TYPE_CHECKING
 | |
| 
 | |
| if TYPE_CHECKING:
 | |
|     from sphinx.application import Sphinx
 | |
| 
 | |
| DOC_NAME_REGEX = re.compile(r"releasenotes/\d+\.\d+\.\d+")
 | |
| VERSION_TITLE_REGEX = re.compile(r"^(\d+\.\d+\.\d+)\n-+\n")
 | |
| 
 | |
| 
 | |
| def get_date_for(git_version: str) -> str | None:
 | |
|     cmd = ["git", "log", "-1", "--format=%ai", git_version]
 | |
|     try:
 | |
|         out = subprocess.check_output(
 | |
|             cmd, stderr=subprocess.DEVNULL, text=True, encoding="utf-8"
 | |
|         )
 | |
|     except subprocess.CalledProcessError:
 | |
|         return None
 | |
|     return out.split()[0]
 | |
| 
 | |
| 
 | |
| def add_date(app: Sphinx, doc_name: str, source: list[str]) -> None:
 | |
|     if DOC_NAME_REGEX.match(doc_name) and (m := VERSION_TITLE_REGEX.match(source[0])):
 | |
|         old_title = m.group(1)
 | |
| 
 | |
|         if tag_date := get_date_for(old_title):
 | |
|             new_title = f"{old_title} ({tag_date})"
 | |
|         else:
 | |
|             new_title = f"{old_title} (unreleased)"
 | |
| 
 | |
|         new_underline = "-" * len(new_title)
 | |
| 
 | |
|         result = source[0].replace(m.group(0), f"{new_title}\n{new_underline}\n", 1)
 | |
|         source[0] = result
 | |
| 
 | |
| 
 | |
| def setup(app: Sphinx) -> dict[str, bool]:
 | |
|     app.connect("source-read", add_date)
 | |
|     return {"parallel_read_safe": True}
 |