- Apache-2.0 LICENSE + NOTICE.
- README, DESIGN, API contract, PORTING guide.
- Build stubs:
Cargo.toml,pyproject.toml,src/lib.rs(signatures +todo!()),.pyitype stubs. - Outcome: you can
git clone,maturin develop, and get an importable module whose functions raiseNotImplementedError/todo!().
Implement, with parity tests vs the git CLI, in this order:
is_git_repo,head_sha,current_branch— smallest, unblock the rest.tracking_branch,remote_head_sha.ahead_behind(+ keeprev_list_count),log_subjects.is_clean,status_counts.remote_urls,last_commit_date.repo_status()roll-up + full SyncState tree.
- Acceptance: every method agrees with
giton the fixture matrix;repo_status()reproducescheck_repoon diverged/ahead/ behind/dirty/no-remote/error fixtures. - Note:
fetch()may ship as a contained shell-out if gix fetch is unstable (see PORTING.md). Everything else is pure gix.
- Add the
GitServiceread-method shim (API.md) in the git-tend tool, or point the status roll-up straight atgitxtend.repo_status(). - Gate behind a feature flag / env var so it can be rolled back instantly.
- Run the git-tend
scan/statusacross the real workspace; compare output to the subprocess implementation byte-for-byte.
- Add a
[[bin]]target reusingrepo.rs/status.rsso `gitxtend status ` works without Python (for cron / shell). Same logic, no PyO3.
- Evaluate porting
pull --ff-only,push,add,commit,stash,branch,reset --hardto gix. Network/mutation paths are less mature in gix; some may stay shelled-out indefinitely. Decide per-method, with the same parity-test bar.
- CLI/UX, YAML config, forge integration (gh/glab PR/MR auto-merge), board conflict resolution, systemd timer.