面向 GitHub PR patch 串流的 Rust CLI

把一個 Pull Request 拆成依 commit 排列的 patch 檔案。

Patchsplit 會下載 GitHub Pull Request 的 .patch 檔案,並為每個 commit 寫出一個可移植 patch,適合 review、封存、重放或交接。

$ patchsplit openai codex 42 -o pr-42-patches
downloaded https://github.com/openai/codex/pull/42.patch
wrote 2 patch file(s)
pr-42-patches/0001-add-parser.patch
pr-42-patches/0002-wire-cli.patch
1 個 PR輸入
N 個 patch輸出
curl執行期依賴

Patchsplit

為 patch 級 review 工作流而寫

它把流程保持得很明確:拉取 Pull Request patch,依 commit 邊界拆分,並寫出可預測且不會意外覆蓋的檔案。

01

兩種輸入方式

可以傳 owner/repo 加 PR 編號,也可以把 owner、repo、PR 編號作為三個參數傳入。

02

可預測檔名

每個檔案使用四位序號加清理後的 commit subject,例如 0001-add-parser.patch。

03

預設拒絕覆蓋

已存在的輸出檔案預設會被保護。只有明確傳入 --force 時才會替換。

04

輕量 Rust 二進位

目前實作不引入第三方 Rust crate,並透過系統 curl 命令完成 HTTPS 下載。

Flow

從 PR 到 patch 集

01

指向 Pull Request

Patchsplit 根據倉庫和 PR 編號拼出 GitHub .patch URL。

02

下載 patch 串流

curl 會跟隨跳轉、在 HTTP 錯誤時失敗,並帶上 patchsplit 版本作為 user agent。

03

依 commit 拆分

mail patch 中的 From 標記定義 commit 邊界;原始單 patch 會保留為一個檔案。

04

寫出可移植檔案

預設輸出到 patches/,也可以透過 --out 指定目錄。

CLI

用法

兩種命令形式都可用,再根據需要選擇輸出目錄和覆蓋行為。

倉庫簡寫

patchsplit <owner/repo> <pr-number> [--out <dir>] [--force]
patchsplit rust-lang/rust 12345

拆開 owner 和 repo

patchsplit <owner> <repo> <pr-number> [--out <dir>] [--force]
patchsplit openai codex 42 -o pr-42-patches

參數

-o, --out <dir>
指定拆分後 patch 檔案的輸出目錄,預設是 patches/。
-f, --force
允許覆蓋已存在的 patch 檔案。
-h, --help
顯示說明。
-V, --version
顯示版本。

Packages

從 release 包安裝

推送 v* tag 後會為 Linux、macOS、Windows 產生發布包。

Linux

tar -xzf patchsplit-linux-x86_64.tar.gz
chmod +x patchsplit
sudo install -m 755 patchsplit /usr/local/bin/patchsplit
patchsplit --version

macOS

tar -xzf patchsplit-macos-x86_64.tar.gz
chmod +x patchsplit
sudo install -m 755 patchsplit /usr/local/bin/patchsplit
patchsplit --version
xattr -d com.apple.quarantine /usr/local/bin/patchsplit

Windows

Expand-Archive .\patchsplit-windows-x86_64.zip -DestinationPath .\patchsplit
.\patchsplit\patchsplit.exe --version

Automation

發版流程

推送 v* tag 會觸發 GitHub Actions。workflow 會建構 Linux、macOS、Windows 封存檔,並建立一個待檢查的 GitHub draft release。

git tag v0.1.0
git push origin v0.1.0

讓 Pull Request patch 小到可以逐個檢查。

開啟專案倉庫