Skip to main content

glrp - git log raw parser

A parser for parsing the output of git log, specifically with the --format=raw option. This is the intended git command to use:

git log -p --format=raw --show-signature --stat

Simply pipe the output:

git log -p --format=raw --show-signature --stat | glrp --pretty

The CLI outputs one JSON object per commit. Each JSON object is on one line, they are separated by newlines. This format is sometimes referred to as JSONL or JSON lines format. With --pretty, each JSON object is indented to be more readable and printed across multiple lines. (But then it is no longer JSONL, strictly speaking).

Why?

The above command provides a lot of useful information about each git commit, which we can analyze, including:

  • Commit message
  • Diff
  • Author name and email
  • Committer name and email
  • Timestamps
  • GPG signature

On its own, git log does not output its information in a format which is easy for other programs to use. So, this tool parses the output and turns it into JSON which is more easy to analyze and check.

Installation

pipx install glrp

Usage

Using it is simple. Run it inside a git repo:

glrp .

Or you can pipe git log output to it:

git log -p --format=raw --show-signature --stat | glrp --output-dir=./out/

Or perhaps a bit more realistic:

git clone https://github.com/cfengine/core
(cd core && git log -p --format=raw --show-signature --stat HEAD~500..HEAD 2>/dev/null) | glrp

(Clone CFEngine core, start subshell which enters the subdirectory and runs git log for the past 500 commits).

Specifying input

By default, glrp parses standard input, and outputs to stdout. To take input from somewhere else, supply a filename:

glrp some_file.jsonl

The file, some_file.jsonl is opened and read, its content is used instead of standard input. You can also specify the path to a folder:

glrp some_dir/

The glrp tool will run the git log command (git log -p --format=raw --show-signature --stat) inside that folder. Output from the git command will be parsed instead of standard input.

Specifying output

You can use shell redirection to print to file instead of standard output:

glrp . > output.jsonl

Compare

If you want to compare the stats for 2 branches, use the --compare flag:

glrp . --compare main,feature...main

(This assumes that feature is based on main).

Alternately, you can compare commit ranges:

glrp . --compare main~5,main...main~5

This generates a .before.json and .after.json file, which can be used to compare those 2 ranges.

You can also specify a date for the comparison:

glrp . --compare 2025-07-01

As above, this will call git log twice, but instead of specifying the ref / range, it will use the --since and --until flags. It also supports relative dates, same as those git flags;

glrp . --compare 5d

Combine

You can combine summary files using the --combine flag:

glrp --combine .before.json,.after.json > combined.json

This is useful for example after generating summaries for different repos. You can use it to create a global summary of all commits in all repos of an organization.

Trusted GPG fingerprints

The summarize functionality can be used to classify different kinds of signed commits. Use the --trusted flag to give a path to a folder containing trusted gpg key fingerprints.

glrp --summarize . --trusted ~/.password-store/.pub-keys/

Important notes

Note: This tool is meant specifically as a parser for the command shown above, not as a generic parser for all the different things git log can output.

Warning: The output of --show-signature varies depending on which keys you have imported / trusted in your installation of GPG. Make sure you import the correct GPG keys beforehand, and don't expect output to be identical across different machines with different GPG states.

Warning: Consider this a best-effort, "lossy" parsing. Commits may contain non utf-8 characters, to avoid "crashing", we skip these, replacing them with question marks. Thus, the parsing is lossy, don't expect all the information to be there. This tool can be used for searching / analyzing commits, but don't use it as some kind of backup tool where you expect to have the ability to "reconstruct" the commits and repo entirely.

Details

For details on how the parsing works, try running with --debug and look at the resulting ./debug/ folder. Also, see the comments in the source code; ./glrp/internal_parser.py

Metadata

Release files for glrp 0.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for glrp 0.3.4
File Size Uploaded Provenance
glrp-0.3.4.tar.gz 18.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for glrp 0.3.4
File Interpreter ABI Platform
glrp-0.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 36.8 kB

Release files / glrp-0.3.4.tar.gz

Download URL glrp-0.3.4.tar.gz
Size 18.7 kB
Tags Source
SHA-256 checksum
How to use checksums
763cf367caed38bd4fbd169c2aed81cea3cfdd0e17de487572a428cdd9376b5a
BLAKE2b-256 checksum
How to use checksums
e4f91384b705b27bc30b190b8635cb33c8b7daf323e7f08636fe2234304510c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.

Transparency log

Release files / glrp-0.3.4-py3-none-any.whl

Download URL glrp-0.3.4-py3-none-any.whl
Size 18.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c0b7fc7e9504ebb17bc37543d7f012aa847a21b5eada8cc9cc3d2e786e27044b
BLAKE2b-256 checksum
How to use checksums
52b0a5de0cd583d6404cfff92ee5c0b446ed200cbcdb84f4849ab9583c2ca2fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.

Transparency log

Security for glrp 0.3.4

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for glrp-0.3.4.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 26, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page