Source code for energytrackr.plot.builtin_data_transforms.commit_details
# src/plot/builtin_data_transforms/commit_details.py"""Fetch commit metadata for each valid commit."""from__future__importannotationsfrompathlibimportPathfromgitimportRepofromenergytrackr.plot.core.contextimportContextfromenergytrackr.plot.core.interfacesimportTransformfromenergytrackr.utils.git_utilsimportget_commit_details_from_gitfromenergytrackr.utils.loggerimportlogger
[docs]classCommitDetails(Transform):"""Fetch commit metadata (date, summary, files_modified, link) for each valid commit. Stores a dict in ctx.artefacts['commit_details'] keyed by full hash. """
[docs]defapply(self,ctx:Context)->None:# noqa: PLR6301"""Fetch commit metadata for each valid commit. Args: ctx (Context): The plotting context containing artefacts and statistics. """logger.info("CommitDetails: fetching commit metadata")valid=ctx.stats.get("valid_commits",[])details:dict[str,dict[str,str]]={}git_repo_path=ctx.artefacts["git_repo_path"]ifnotgit_repo_pathornotPath(git_repo_path).is_dir():logger.warning("CommitDetails: no repo path; skipping metadata fetch")else:ctx.artefacts["project_name"]=Path(git_repo_path).nametry:repo=Repo(git_repo_path)exceptException:logger.exception("CommitDetails: failed to open repo at %s",git_repo_path)else:forcommitinvalid:try:details[commit]=get_commit_details_from_git(commit,repo)exceptException:logger.exception("CommitDetails: failed to get details for %s",commit)logger.debug("CommitDetails: %d commits with details",len(details))ctx.artefacts["commit_details"]=details