Files
docupulse/timespent.py
2025-08-26 17:57:33 +02:00

54 lines
1.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import subprocess
from datetime import datetime, timedelta
# Run git log command
log_output = subprocess.check_output(
['git', 'log', '--pretty=format:%h %an %ad', '--date=iso'],
text=True
)
# Parse commit dates
commit_times = []
for line in log_output.splitlines():
parts = line.strip().split()
if len(parts) < 4:
continue
# Commit hash, author, datetime string
dt_str = " ".join(parts[2:4]) # "YYYY-MM-DD HH:MM:SS"
try:
dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S")
commit_times.append(dt)
except ValueError:
continue
# Sort commits chronologically
commit_times.sort()
# Session grouping (commits < 1 hour apart are same session)
SESSION_GAP = timedelta(hours=1)
sessions = []
if commit_times:
start = commit_times[0]
prev = commit_times[0]
for t in commit_times[1:]:
if t - prev > SESSION_GAP:
# Close previous session
sessions.append((start, prev))
start = t
prev = t
sessions.append((start, prev)) # last session
# Estimate durations
total_time = timedelta()
for start, end in sessions:
duration = end - start
# Add a minimum session length (e.g. 30 min) so single commits arent near-zero
if duration < timedelta(minutes=30):
duration = timedelta(minutes=30)
total_time += duration
print(f"Number of commits: {len(commit_times)}")
print(f"Number of sessions: {len(sessions)}")
print(f"Estimated total coding time: {total_time} (~{total_time.total_seconds()/3600:.1f} hours)")