Git Blame - Porcelain Format With Repeated Commit Headers
The stable machine format of git blame: a full header block the first time a commit appears and a bare `<sha> <old> <new>` line every time after, with each source line following on a tab-prefixed line. A parser that expects the header on every group loses the author of every line after the first.
437e21e3ec5b252950b50e724b9522198aa02751 1 1 3
author Ada Fernsby
author-mail <ada.fernsby@example.invalid>
author-time 1772442843
author-tz +0000
committer Ada Fernsby
committer-mail <ada.fernsby@example.invalid>
committer-time 1772442843
committer-tz +0000
summary feat(ledger): treat a zero delta as a no-op
filename internal/ledger/apply.go
package ledger
437e21e3ec5b252950b50e724b9522198aa02751 2 2
437e21e3ec5b252950b50e724b9522198aa02751 3 3
import (
b06c6299e8931725dd967c0724b45431be10adeb 4 4 2
author Ada Fernsby
author-mail <ada.fernsby@example.invalid>
author-time 1773394862
author-tz +0000
committer Ada Fernsby
committer-mail <ada.fernsby@example.invalid>
committer-time 1773394862
committer-tz +0000
summary feat(rounding)!: round half to even instead of half up
previous 437e21e3ec5b252950b50e724b9522198aa02751 internal/ledger/apply.go
filename internal/ledger/apply.go
"errors"
b06c6299e8931725dd967c0724b45431be10adeb 5 5
"fmt"
Specifications
- Seed
- 20260807
- Command
- git blame --porcelain internal/ledger/apply.go
- Lines
- 5
- Commits
- 2
- Header Repeats Once Per Commit
- true
- Content Lines Prefixed With Tab
- true
- Line Endings
- LF
- Encoding
- UTF-8
Testing contract
Expected to pass- Scenario
- Attribute each source line to an author from porcelain blame output.
- Expected result
- All five lines are attributed; the second and third lines inherit the header from the first occurrence of their commit, and the tab prefix is stripped from content lines including the empty line 2.
What is a .log file?
LOG files are plain-text records of events emitted by software, typically one entry per line with a timestamp, severity, and message. There is no single standard, so formats range from unstructured text to structured JSON lines. They are central to debugging, monitoring, and auditing.
How to use this file
Use an example LOG file to test log parsers, timestamp and severity extraction, line-oriented streaming, and ingestion into monitoring or analysis pipelines.
How to use this file for testing
“Git Blame - Porcelain Format With Repeated Commit Headers” is a deterministic Novus Examples fixture for Log parsing, Visual diff / regression, Metadata testing. Access logs and JSON-lines application logs — for testing log parsers, tailers, and ingestion pipelines.
Documented properties for this file: seed 20260807 · UTF-8 · LF. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.
Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.
Diff and patch fixtures name their target paths and the exact edge case they exercise — rename, mode change, binary hunk, CRLF↔LF, or missing trailing newline. Apply or render them against the documented before-state; every author, path, and hash is fictional.
Code examples
grep -i error git-blame-porcelain.log | head
awk '{print $1, $2, $NF}' git-blame-porcelain.log | headRelated files
- logGit Log - --name-status With Rename ScoresPer-commit file lists with single-letter status codes, tab-separated. Rename rows are the trap: `R100` is followed by TWO paths instead of one, so a splitter that takes field 2 as the filename reports the old path for renames and the new path for everything else.

- logGit Log - --numstat With a Binary RowMachine-readable insertion and deletion counts per file. Two rows break naive arithmetic: the binary file reports `-` in both numeric columns rather than 0, and the rename path is brace-compressed into `docs/{README.md => guide.md}` rather than written out twice.

- logGit Log - --oneline OutputSix commits as `git log --oneline` prints them: an abbreviated hash, a space, and the subject line. Every subject follows Conventional Commits, including one with a `!` breaking marker, so a release-notes generator can be scored against a known answer.

- logGit Log - Default Format With Conventional Commit BodiesThe default `git log` format for the same six commits: full 40-character hashes, Author and Date headers, and message bodies indented by exactly four spaces with genuinely empty separator lines. One commit carries a `BREAKING CHANGE:` footer and another a `Fixes:` footer, which is the shape a changelog generator has to find.

- logGit Shortlog - Commits Grouped by AuthorThe author-grouped summary git generates for release notes: a name, a commit count in parentheses, and the subjects indented by six spaces. The counts here are what the .mailmap fixture in this category produces after coalescing aliases, so the two files can be used together.

- logGit Status - Porcelain v1 With Every Status PairPorcelain v1 output covering staged-only, worktree-only, added, renamed, deleted, unmerged, untracked and ignored entries. The two status characters are positional and a space is meaningful, so trimming the line before parsing turns ' M' (modified but unstaged) into 'M' (staged).

Generated by generation/version_control.py. Free for any use, no attribution required — license.