Skip to main content

Count lines of code from GitHub pull requests

Project description

trueloc - Lines of Code Counter

PyPI Python License Downloads CI Docs

trueloc Logo

A CLI tool to analyze your coding activity via GitHub pull requests and direct commits:

  • Total lines written since any date
  • Per-PR and per-commit breakdown showing when each contribution was made
  • File type analysis revealing which languages you've worked with most

Counts ALL lines touched across every commit in a PR—even for squash merges where GitHub only shows the final diff. For example, a PR where you add 1000 lines, delete them, then add 1 line shows +1001 / -1000 (not just +1).

Installation

# Clone and install
git clone https://github.com/basnijholt/trueloc.git
cd trueloc
pip install -e .

# Or with uv
uv pip install -e .

Requires the GitHub CLI (gh) to be installed and authenticated:

gh auth login

Usage

# Count lines from PRs and direct commits since a date
trueloc count USERNAME --since 2023-01-01

# Use relative dates
trueloc count USERNAME --since 5d      # 5 days ago
trueloc count USERNAME --since 2w      # 2 weeks ago
trueloc count USERNAME --since 3m      # 3 months ago
trueloc count USERNAME --since 1y      # 1 year ago
trueloc count USERNAME --since "last month"

# Specify a date range
trueloc count USERNAME --since 2024-01-01 --until 2024-06-30

# Count only net diff (not per-commit)
trueloc count USERNAME --since 2023-01-01 --net

# Exclude direct commits (PRs only)
trueloc count USERNAME --since 2023-01-01 --no-direct-commits

# Hide file extension breakdown
trueloc count USERNAME --since 2023-01-01 --no-extensions

# Disable caching (fresh API calls)
trueloc count USERNAME --since 2023-01-01 --no-cache

# Output as JSON for scripting/postprocessing
trueloc count USERNAME --since 2023-01-01 --json

# Clear the cache
trueloc clear-cache

Features

  • Per-commit counting (default): Counts every line touched in every commit
  • Net diff mode: Alternative mode that only counts final diff (--net)
  • Direct commits: Includes commits pushed directly to main (not via PR)
  • File extension breakdown: Shows which languages you've worked with
  • JSON output: Machine-readable output for scripting (--json)
  • Disk caching: Uses diskcache to avoid hammering the GitHub API
  • Rate limit handling: Automatically waits when rate limited with progress bar
  • Flexible dates: Supports relative (5d, 2w, 3m, 1y) and natural language (last month)

Caching Strategy

  • Immutable data (cached forever): commit stats, PR commits, PR files
  • Mutable data (1 day TTL): user repos, merged PR lists

Cache is stored in ~/.cache/trueloc/.

Tech Stack

Development

# Install dev dependencies
uv sync --group dev

# Run tests
pytest

# Run linting
ruff check .
ruff format .
mypy .

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trueloc-0.2.0.tar.gz (63.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trueloc-0.2.0-py3-none-any.whl (18.5 kB view details)

Uploaded Python 3

File details

Details for the file trueloc-0.2.0.tar.gz.

File metadata

  • Download URL: trueloc-0.2.0.tar.gz
  • Upload date:
  • Size: 63.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for trueloc-0.2.0.tar.gz
Algorithm Hash digest
SHA256 df4d18e27524599b4a84cd4a11e557058507045f060803c3f30fddf48c048746
MD5 a27c38ed4e5e9a570b6440adccc71f81
BLAKE2b-256 c2d3e48c899913e258766d7c5c09e644020ff1f75d33a36f0cc8e2613ef51ba5

See more details on using hashes here.

Provenance

The following attestation bundles were made for trueloc-0.2.0.tar.gz:

Publisher: release.yml on basnijholt/trueloc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file trueloc-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: trueloc-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for trueloc-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 74366c763732c907af1cfb2976925cec5b3dd1117794492f46e04375baa8f90e
MD5 cdfae645605d397f841a21ac6180d36f
BLAKE2b-256 4db13cc47281297a6f56957cd497d9a4b1f45f1c1362628c29e4a5e57f6c22ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for trueloc-0.2.0-py3-none-any.whl:

Publisher: release.yml on basnijholt/trueloc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page