From 2ca01d21b35898cd0722a53d757427e21a1c2915 Mon Sep 17 00:00:00 2001 From: Jon Michael Aanes Date: Tue, 4 Jun 2024 00:02:49 +0200 Subject: [PATCH] Report works! --- git_time_tracker/__init__.py | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/git_time_tracker/__init__.py b/git_time_tracker/__init__.py index 6465963..992e307 100644 --- a/git_time_tracker/__init__.py +++ b/git_time_tracker/__init__.py @@ -18,18 +18,32 @@ class WorkSample: labels: Sequence[str] +def determine_default(repo: git.Repo): + try: + repo.commit('main') + return 'main' + except: + return 'master' + +HIDDEN_LABEL_PREFIX = '__' +HIDDEN_LABEL_TOTAL = HIDDEN_LABEL_PREFIX + 'TOTAL' + def get_samples_from_project(repo: git.Repo) -> Iterator[WorkSample]: - labels = [] - labels.append('project:'+repo.remotes.origin.url) + labels = [HIDDEN_LABEL_TOTAL] + labels.append(repo.remotes.origin.url.removeprefix('git@gitfub.space:')) # TODO: Branch on main or master or default - for commit in repo.iter_commits('main'): + + repo.commit() + + for commit in repo.iter_commits(determine_default(repo)): yield WorkSample(datetime.datetime.fromtimestamp(commit.authored_date, tz=datetime.UTC), tuple(labels)) yield WorkSample(datetime.datetime.fromtimestamp(commit.committed_date, tz=datetime.UTC), tuple(labels)) DEFAULT_EST_TIME=datetime.timedelta(hours=1) ZERO_DURATION = datetime.timedelta(seconds = 0) +HOUR = datetime.timedelta(hours = 1) def generate_report(samples: list[WorkSample]) -> Iterator[str]: @@ -48,20 +62,22 @@ def generate_report(samples: list[WorkSample]) -> Iterator[str]: del sample, est_time time_and_label = [(duration, label) for label,duration in time_per_label.items()] - time_and_label.sort() + time_and_label.sort(reverse=True) # - yield 'Time report:\n' + yield '-' * 56 + yield '\n' for (total_time, label) in time_and_label: - yield ' ' - yield label - yield ' ' - yield str(total_time) - yield '\n' + if label.startswith(HIDDEN_LABEL_PREFIX): + continue + yield f' {label:40} {total_time / HOUR:-4.0f} hours\n' del label, total_time + yield '-' * 56 yield '\n' + yield ' {label:40} {hours:-4.0f} hours\n'.format(label='TOTAL', hours = time_per_label[HIDDEN_LABEL_TOTAL] / HOUR) + def main(): args = parse_arguments()