Table of Contents
The Cache
The cache is stift/ in the directory UIOP's xdg-cache-home names:
~/.cache/stift/ on Linux, %LOCALAPPDATA%\cache\stift\ on Windows. It
holds:
| Directory | What it holds |
|---|---|
git/HOST/PATH.git/ |
A bare repository for each project, with its branches and tags |
src/NAME@COMMIT/ |
The files of one commit, never changed once made |
setup/KEY.lisp |
The setup file of one build list |
fasl/IMPLEMENTATION/KEY/NAME/ |
The fasls of one build list, for one implementation |
A commit ID fixes the whole tree, so a fork and its original share the
checkout of a commit they share. The files are checked out with the line
endings the repository has, on every system: Git for Windows would turn
them into CR LF by default, which would change every string that spans
lines. stift clean deletes the read-only files git makes, which Windows
otherwise refuses to delete.
Sharing it
Any number of processes and threads may use the cache at once. A checkout is made in a temporary directory and renamed into place, so it appears whole or not at all; two fetches into one repository wait for each other's locks on refs, for up to a minute.
stift never collects its repositories' garbage, so a commit that a force-push removed from its repository stays in the cache for the stiftfiles that pin it. A fresh cache cannot fetch such a commit.
Environment variables
| Variable | What it does |
|---|---|
STIFT_CACHE |
Moves the cache |
STIFT_OFFLINE |
Any value but 0 or empty: never use the network, as --offline |
STIFT_GIT |
The git program, git by default |
STIFT_WORKSPACE |
The stiftwork to work in, or off for none; unset, stift looks for one (see Workspaces) |
Cleaning it
stift clean deletes the repositories, checkouts, setup files and fasls;
stift clean --fasls only the fasls. stift fetches and compiles again what
it needs next.