import argparse import time import dataclasses import git import datetime from collections.abc import Iterator, Sequence def parse_arguments(): parser = argparse.ArgumentParser() parser.add_argument("repo") return parser.parse_args() @dataclasses.dataclass class WorkSample: registered_at: datetime.datetime labels: Sequence[str] def get_samples_from_project(repo: git.Repo) -> Iterator[WorkSample]: labels = [] labels.append('project:git_time_tracker') for commit in repo.iter_commits('main'): assert commit.authored_date == commit.committed_date, 'Not yet supported' committed_at = datetime.datetime.fromtimestamp(commit.authored_date, tz=datetime.UTC) yield WorkSample(committed_at, tuple(labels)) def main(): args = parse_arguments() repo = git.Repo(args.repo) print(repo) # TODO: Branch on main or master or default print(list(get_samples_from_project(repo)))