diff --git a/completion.py b/completion.py index 68766940a..ec28cc721 100644 --- a/completion.py +++ b/completion.py @@ -20,11 +20,13 @@ def branches_from_devguide(devguide_dir: Path) -> list[str]: ] -def get_completion(clones_dir: str, repo: str) -> tuple[float, 'TranslatorsData', str]: +def get_completion( + clones_dir: str, repo: str +) -> tuple[float, 'TranslatorsData', str, float]: clone_path = Path(clones_dir, repo) for branch in branches_from_devguide(Path(clones_dir, 'devguide')) + ['master']: try: - git.Repo.clone_from( + clone_repo = git.Repo.clone_from( f'https://github.com/{repo}.git', clone_path, branch=branch ) except git.GitCommandError: @@ -44,7 +46,27 @@ def get_completion(clones_dir: str, repo: str) -> tuple[float, 'TranslatorsData' hide_reserved=False, api_url='', ).completion - return completion, translators_data, branch + + if completion: + # Fetch commit from before 30 days ago and checkout + commit = next( + clone_repo.iter_commits('HEAD', max_count=1, before='30 days ago') + ) + clone_repo.git.checkout(commit.hexsha) + with TemporaryDirectory() as tmpdir: + month_ago_completion = potodo.merge_and_scan_path( + clone_path, + pot_path=Path(clones_dir, 'cpython/Doc/build/gettext'), + merge_path=Path(tmpdir), + hide_reserved=False, + api_url='', + ).completion + else: + month_ago_completion = 0.0 + + change = completion - month_ago_completion + + return completion, translators_data, branch, change @dataclass(frozen=True) diff --git a/generate.py b/generate.py index a90cf1709..48b989194 100644 --- a/generate.py +++ b/generate.py @@ -69,11 +69,12 @@ def get_project_data( ) -> 'LanguageProjectData': built = language.code in languages_built if repo: - completion, translators_data, branch = get_completion(clones_dir, repo) + completion, translators_data, branch, change = get_completion(clones_dir, repo) visitors_num = get_number_of_visitors(language.code, http) if built else 0 else: completion = 0.0 translators_data = TranslatorsData(0, False) + change = 0.0 visitors_num = 0 branch = None return LanguageProjectData( @@ -81,6 +82,7 @@ def get_project_data( repo, branch, completion, + change, translators_data, visitors_num, built, @@ -96,6 +98,7 @@ class LanguageProjectData: repository: str | None branch: str | None completion: float + change: float translators: TranslatorsData visitors: int built: bool