Files
git-cli/README.md
T
2026-08-13 14:48:52 +02:00

66 lines
2.2 KiB
Markdown

# git-cli
A small command-line-like Git interface for Racket. The package invokes the
installed `git` executable and exposes commands both through the generic `git`
procedure and through direct procedures.
```racket
(require git-cli)
(git 'status)
(git 'log '-l '-5)
(git 'fetch '--prune)
(git 'switch "main")
(git 'tag "v0.3.16")
(git 'diff)
(git 'show 'HEAD)
(git-status)
(git-fetch '--prune)
(git-switch "main")
(git-tag "v0.3.16")
```
`git` is an ordinary procedure. The first argument is the Git command symbol
and the remaining arguments are passed to that command.
Several commands provide Racket-oriented output in addition to the normal Git
behavior:
- `git-status` uses Git's porcelain status and returns structured status items.
- `git-log -l` / `git-log --list` returns `(commit subject)` items.
- `git-tag -l` / `git-tag --list` returns tag names; with `-n` it returns `(tag subject)` items and `-n<number>` supports multiple content lines.
- `git-diff` renders HTML by default; `--output=-` selects stdout and
`--output=string` returns a string.
- `git-show` renders a commit and its diff as HTML by default. `-l` /
`--list` provides structured variants for `--stat`, `--name-only`, and
`--name-status`.
Git is searched on `PATH`. Git itself remains responsible for remotes,
credentials, SSH keys, pull strategy, and other repository configuration.
## Commands
The package currently registers commands including `status`, `add`, `commit`,
`push`, `pull`, `fetch`, `branch`, `switch`, `clone`, `tag`, `log`,
`rev-list`, `diff`, `show`, `grep`, `help`, `version`, and `new-version`.
Most are also exported as direct procedures such as `git-status`, `git-add`,
`git-fetch`, `git-switch`, `git-tag`, `git-log`, `git-diff`, and `git-show`.
See the Scribble documentation for command-specific behavior and return values.
## Low-level Git execution
`run-git` can be used when direct access to Git's stdin/stdout protocol is
needed. Optional text can be supplied to Git with `#:input`.
```racket
(run-git '(credential fill)
#:input "protocol=https\nhost=git.dijkewijk.nl\n\n")
```
The result remains two values: Git's exit code and the ordered
`(source line)` output items.