Repository navigation
docs: fix metadata, slim the README, widen CI to 3.10-3.13 - #1
Merged
Merged
Conversation
Quick wins from the roadmap, plus the two documentation items. README - Fix the clone URL: github.com/example/tiny-git -> github.com/TheronRadley/tiny-git. - Remove the duplicated "tiny-git (tiny-git)" in the intro and explain the hyphen once: `tiny-git` is the distribution/command, `tinygit` is the importable package, because hyphens are not legal in Python identifiers. - Replace the hardcoded "[Tests: 98 Passed (0 Failed)]" line with a live GitHub Actions badge, and drop the baked-in counts from the prose. - Move the invariants table, the test-suite breakdown, and the benchmark table into docs/ behind a documentation index. The README keeps the pitch, install, quick start, and command list. - Add a "Not wire-compatible with real Git" section: trees are UTF-8 text and the index is JSON, so real git cannot read a .tinygit repository. - Correct the sample `fsck` output. It claimed 3 objects for the quick start that precedes it; the real run produces 6. docs/ - New docs/testing.md: what the suite covers, a dated per-module inventory, and the command to regenerate it. Notes that no test currently spawns a real subprocess -- the CLI contract tests call main() in-process. - New docs/benchmarks.md: freshly measured numbers at 100/1k/2.5k/10k files with the exact hardware, Python version, and run count recorded. The old README table did not match the script's actual output keys. Packaging & CI - pyproject: fix the four project.urls still pointing at example/tiny-git, lower requires-python to >=3.10 with matching classifiers, target ruff and mypy at py310, and switch to the PEP 639 SPDX license expression (setuptools>=77) to clear the build deprecation that would block a future PyPI publish. - tests.yml: matrix over ubuntu+macos x Python 3.10-3.13 with fail-fast off, plus a clearly-labelled non-blocking Windows job. Windows is kept non-blocking because the executable-mode round-trip tests cannot pass there; the specific blockers are listed in a comment. - Add .gitattributes pinning eol=lf so blobs and test fixtures are never rewritten on a Windows checkout. CHANGELOG - Collapse the 1.0.0/1.1.0 entries into a single 1.0.0. Neither was ever tagged or published, every feature listed under both is in the shipped code, and 1.1.0 stays reserved for the roadmap's tag/count-objects/gc work. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
Generated at 1774x887 (exact 2:1) and resampled to GitHub's recommended 1280x640 with Lanczos, landing at 0.6 MB -- under the 1 MB upload cap. GitHub exposes no API for social previews, so it still has to be attached manually under Settings -> General -> Social preview; keeping the source in the repo means it is version-controlled and regenerable. Co-authored-by: arena-agent <297053741+arena-agent@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this does
Works the "quick wins" and the two documentation items from the roadmap, top to bottom.
Quick wins
github.com/example/tiny-git→github.com/TheronRadley/tiny-git. Also fixed fourproject.urlsinpyproject.tomlthat were still pointing atexample/.tiny-git(tiny-git), and added a table explaining the hyphen once:tiny-gitis the distribution and the command,tinygitis the importable package, because hyphens are not legal in Python identifiers.[Tests: 98 Passed (0 Failed)]with the workflow's own badge, and stripped baked-in counts from the prose. Counts now live indocs/testing.mdwith the command to regenerate them.gh repo edit --add-topicreturnsHTTP 403: Resource not accessible by integration. The token reportsadmin: trueon the repo but the app installation lacks the Administration permission that the topics endpoint requires. Addpython,git,version-control,educationalunder Settings → General → Topics, or grant the app that permission.docs/, but GitHub has no API for social previews; it must be uploaded under Settings → General → Social preview.Docs
docs/behind a documentation index. The README keeps the pitch, install, quick start, and command list.src/tinygit/objects.py:Tree.serialize()emits UTF-8mode sha name\nlines, and.tinygit/indexis JSON. Real git reads binary trees and a binary index, so neither tool can read the other's repository.Packaging & CI
requires-pythonlowered>=3.12→>=3.10, classifiers andruff/mypytargets follow. Matrix is now ubuntu + macos × 3.10–3.13,fail-fast: false.os.chmod(0o755)only flips the read-only bit on Windows, so the executable-mode round-trip tests cannot pass there. The four specific call sites are named in a workflow comment; promote the job once they skip on platforms without POSIX mode bits..gitattributes—* text=auto eol=lf, so blobs and fixtures are never rewritten on a Windows checkout.license = "MIT"withsetuptools>=77, clearing the build deprecation that would otherwise block a PyPI publish (deadline 2027-02-18).CHANGELOG
Collapsed the
1.0.0/1.1.0entries into a single1.0.0. Neither version was ever tagged or published, every feature listed under both is present in the shipped code, and1.1.0stays reserved for the roadmap'stag/count-objects/gcwork — so this file,pyproject.toml, and thev1.0.0tag will agree.Corrections to claims that were wrong
fscksample output showed✓ 3 objects checkedgrep -rn subprocess tests/returns nothing.test_cli_contract.pycallsmain()in-process. Noted as an open gap indocs/testing.md.statusanddiffrowsrun_benchmarks.pyemitsstatus_staged,status_clean, anddiff_clean. The table did not match the script that produced it.Verification
Run locally on Python 3.11.2 (below the old
>=3.12floor):The wheel was installed into a clean venv and the
tiny-gitconsole script exercised end to end (init→config→add→commit→fsck→log). Benchmarks were re-run at 100/1,000/2,500/10,000 files; all operations scale between 9.1× and 10.5× for a 10× file increase, i.e. linear.3.10 is asserted by this PR's CI run, not by a local run — there is no 3.10 interpreter in the sandbox. If the 3.10 leg goes red, the floor needs to move back to
>=3.11.Follow-ups (not in this PR)
sys.executable -m tinygit.