1
0
git-time-tracker/git_time_tracker/__init__.py

83 lines
1.8 KiB
Python
Raw Normal View History

2024-07-09 22:15:45 +00:00
"""# Git-based Time Tracker.
Quick and dirty time tracker on git histories.
Uses the simple heuristics that each commit takes precisely one hour of work.
It will automatically trim commits below one hour if another commit occurred
less than an hour ago.
Usage:
```
python -m git_time_tracker REPO1 REPO2...
```
# Obligatory
This tool reports:
```
project Jmaa/git-time-tracker.git 3h 33m (2024)
```
And the ([Hamster](https://github.com/projecthamster/hamster)) manual time tracker reports:
![](docs/obligatory-hamster.png)
"""
2024-06-03 20:42:05 +00:00
import argparse
2024-06-03 21:01:45 +00:00
import datetime
2024-06-08 12:43:44 +00:00
import logging
import sys
2024-06-03 21:13:16 +00:00
from pathlib import Path
2024-06-03 20:42:05 +00:00
2024-08-25 21:41:42 +00:00
from .data import HIDDEN_LABEL_PREFIX, HIDDEN_LABEL_TOTAL, WorkSample
from .format import cli
from .source import git_repo
2024-06-03 22:15:18 +00:00
logger = logging.getLogger(__name__)
2024-06-08 12:43:44 +00:00
DEFAULT_EST_TIME = datetime.timedelta(hours=1)
ZERO_DURATION = datetime.timedelta(seconds=0)
HOUR = datetime.timedelta(hours=1)
2024-06-08 12:49:26 +00:00
MINUTE = datetime.timedelta(minutes=1)
2024-06-08 12:43:44 +00:00
2024-06-03 21:49:42 +00:00
def parse_arguments():
parser = argparse.ArgumentParser()
2024-08-25 21:41:42 +00:00
parser.add_argument(
'--git-repo',
action='extend',
nargs='+',
type=Path,
dest='repositories',
2024-08-25 21:41:42 +00:00
)
parser.add_argument(
'--filter',
action='extend',
nargs='+',
type=str,
dest='sample_filter',
default=[],
)
return parser.parse_args()
2024-06-03 20:42:05 +00:00
def main():
2024-06-03 22:15:18 +00:00
logging.basicConfig()
2024-06-03 20:42:05 +00:00
args = parse_arguments()
2024-06-03 21:13:16 +00:00
shared_time_stamps: set[WorkSample] = set()
for repo_path in args.repositories:
2024-06-03 22:15:18 +00:00
logger.warning('Visit %s', repo_path)
2024-08-25 21:41:42 +00:00
shared_time_stamps |= set(
git_repo.iterate_samples_from_git_repository(repo_path),
)
2024-06-03 21:49:42 +00:00
shared_time_stamps = sorted(shared_time_stamps)
for t in cli.generate_report(shared_time_stamps, sample_filter=args.sample_filter):
2024-06-03 21:49:42 +00:00
sys.stdout.write(t)