Tool for patching third-party dependencies without need to fork them
  • Python 87.1%
  • Nix 12.9%
Find a file
kp2pml30 b13f2ad76c
Some checks are pending
CI / ci (push) Waiting to run
chore(ci): add github actions, gate on 100% branch coverage 👷
Two steps on pushes to main and PRs: `nix flake check` (nixfmt +
ruff-format + the sandboxed pytest suite) and a standalone pytest run for
faster failure output. Both invoke `pytest --cov`; `.coveragerc` now sets
`fail_under = 100`, so any uncovered branch of the tool fails the build.
The flake `tests` derivation gains pytest-cov, and tests for the guard's
base-bump, amended-commit and empty-commit branches close the gaps.
2026-07-13 14:48:53 +09:00
.github/workflows chore(ci): add github actions, gate on 100% branch coverage 👷 2026-07-13 14:48:53 +09:00
docs/contributing test: drive the tool in-process for 100% branch coverage 2026-07-13 00:45:27 +09:00
support/scripts chore: adopt new-repo scaffolding and git-hooks.nix flake 🏗️ 2026-07-13 00:12:00 +09:00
tests chore(ci): add github actions, gate on 100% branch coverage 👷 2026-07-13 14:48:53 +09:00
.coveragerc chore(ci): add github actions, gate on 100% branch coverage 👷 2026-07-13 14:48:53 +09:00
.editorconfig chore: adopt new-repo scaffolding and git-hooks.nix flake 🏗️ 2026-07-13 00:12:00 +09:00
.gitattributes chore: adopt new-repo scaffolding and git-hooks.nix flake 🏗️ 2026-07-13 00:12:00 +09:00
.gitignore test: drive the tool in-process for 100% branch coverage 2026-07-13 00:45:27 +09:00
collect-sources.nix feat(nix): expose collectSources as a first-class LGPL library 2026-07-13 00:16:16 +09:00
flake.lock chore: adopt new-repo scaffolding and git-hooks.nix flake 🏗️ 2026-07-13 00:12:00 +09:00
flake.nix chore(ci): add github actions, gate on 100% branch coverage 👷 2026-07-13 14:48:53 +09:00
git-third-party fix(update): refuse to overwrite unsaved local commits 🔒🐛 2026-07-13 14:37:06 +09:00
LICENSE Initial commit 2024-08-20 10:18:19 +04:00
LICENSE.lgpl fix: change license of nix 2025-05-12 16:58:59 +04:00
README.md docs(readme): show running from the flake with nix run 📝 2026-07-13 13:58:10 +09:00
ruff.toml chore(cli): make the tool importable behind a main() guard ♻️ 2026-07-13 00:45:26 +09:00

Git third party

Patch third-party libraries without forking them.

standard-readme compliant License: GPL v3

Background

git-third-party is a small zero-dependency utility that is an alternative to git-submodules and git-subtree. It stores only the delta (your changes) inside your tree, not the full vendored source.

It is not oriented for highly concurrent modification of third-party tools by multiple users.

Install

With Nix (flakes):

nix profile install github:kp2pml30/git-third-party

Or just drop the single script on your PATH — it needs only python3 and git:

curl -o ~/.local/bin/git-third-party https://raw.githubusercontent.com/kp2pml30/git-third-party/main/git-third-party
chmod +x ~/.local/bin/git-third-party

Usage

# add a third-party repository
git-third-party add third-party/RustPython https://github.com/RustPython/RustPython.git a13b99642b0bc13ca89d01768a7ddbec18fe8219
# ^ git-third-party add <relative path> <repository url> <commit hash>

# now modify it as a regular repository, and commit your changes

# save patches to push to your origin
git-third-party save third-party/RustPython
# ^ git-third-party save <relative path>

# reapply patches (e.g. on a fresh checkout)
git-third-party update third-party/RustPython
# ^ git-third-party update <relative path>

Without installing, you can run it straight from the flake:

nix run github:kp2pml30/git-third-party -- add third-party/RustPython <url> <commit>

How it works

It stores a configuration under /.git-third-party/ that describes all third-party repositories and their patches. save updates the patches, update reapplies them.

The .git-third-party directory must be tracked by git, while the third-party working trees themselves should not be.

Best effort is made to keep patches deterministic and to strip metadata from them, including:

  • git version
  • commit hash (which depends on the committer)

Contributing

See docs/contributing/.

License

GPL-3.0 (C) 2024-2026 Kira Prokopenko