No results
7
Errors
dxtr edited this page 2026-10-16 22:45:31 +02:00
Table of Contents
Errors
Every error stift signals is a stift-error, whose message says what went
wrong and what to do about it. The command line prints it after stift:
and exits with 1.
| Condition | When | Readers |
|---|---|---|
manifest-error |
A stiftfile cannot be read, or breaks the rules of what it holds. The report starts with FILE:LINE:COLUMN: |
manifest-error-file, manifest-error-line, manifest-error-column |
url-error |
A URL stift does not fetch from: unreadable, or http:// or git:// |
url-error-url |
git-error |
A git command failed. The message holds what git said and the command | git-error-command, git-error-status, git-error-output |
ref-error |
A branch, tag or commit names nothing, or both a branch and a tag; or it needs the network, offline | ref-error-url, ref-error-ref |
missing-commit |
No branch or tag reaches a commit, or the cache lacks it offline | missing-commit-url, missing-commit-commit |
no-manifest |
No stiftfile in a directory or above it | no-manifest-directory |
diverged-requirements |
No commit required of a project contains all the others | diverged-requirements-identity, diverged-requirements-edges |
inconsistent-manifest |
The stiftfile does not hold the build list its requirements make; stift tidy brings it up to date |
inconsistent-manifest-file, inconsistent-manifest-edges |
system-collision |
Two projects of the build list provide one system | system-collision-system, system-collision-identities |
name-mismatch |
A project's stiftfile names another project than the one required: a fork or a mirror | name-mismatch-url, name-mismatch-commit, name-mismatch-named |
moved-tag |
A tag points to another commit than the one recorded beside it | moved-tag-url, moved-tag-tag, moved-tag-recorded, moved-tag-now |
rewritten-branch |
A branch no longer contains the commit recorded beside it | rewritten-branch-url, rewritten-branch-branch, rewritten-branch-recorded, rewritten-branch-now |
workspace-error |
A workspace stift cannot work in: a stiftwork that breaks its rules, a member that is no project or two that are one, a project that is not a member, or members work sync cannot pin. The report starts with the stiftwork, and its line and column when the error is about its text |
workspace-error-file, workspace-error-line, workspace-error-column |
vendor-mismatch |
The copies in vendor/ do not match the stiftfile, whose requirements or replacements changed since stift vendor ran; or a copy is missing; or vendor/projects cannot be read. stift vendor copies the build list again. The report starts with vendor/projects, and its line and column when the error is about its text |
vendor-mismatch-file, vendor-mismatch-line, vendor-mismatch-column |
Warnings are stift-warnings, whose message says what stift did otherwise
than it was asked to, and why: so far, an executable stift build --compress built uncompressed, on a Lisp that cannot compress it. The
command line prints them after stift: , and goes on.
The -edges readers return edge objects, the requirements concerned:
edge-requirer and edge-requirer-commit say who requires, and
edge-requirement what.
stift-error-message reads the message of any of them.
Some messages
stift: file:///srv/git/lib has no branch or tag named nope.
stift: https://example.org/x has a branch and a tag both named v1. Say
which: https://example.org/x@refs/heads/v1 or https://example.org/x@refs/tags/v1.
stift: No branch or tag of https://example.org/x reaches commit 1a2b..., so
stift cannot fetch it. A force-push may have removed it. Require a commit
the repository still has, as stift get https://example.org/x@BRANCH does.
stift: There is no stiftfile in /home/me/ or any directory above it. Make
one in the project's directory with stift init.
stift: The requirements on fakehacker.cc/dxtr/cl-ffi have diverged:
fakehacker.cc/dxtr/cl-harfbuzz at 1a2b3c4d5e6f requires 4f0c1a2b3c4d (branch "faster-calls")
fakehacker.cc/dxtr/cl-ft2 at 9d8e7f6a5b4c requires 7a6b5c4d3e2f
Neither commit contains the other. Require a commit that contains both, such
as a merge, or choose one in the :replace of the main project's stiftfile, or
of the workspace's stiftwork:
("https://fakehacker.cc/dxtr/cl-ffi.git" :commit "...")
stift: /home/me/app/stiftfile does not hold the build list its requirements make:
fakehacker.cc/dxtr/cl-ft2 at 9d8e7f6a5b4c requires fakehacker.cc/dxtr/cl-ffi at 7a6b5c4d3e2f, but the stiftfile has b7248691986f, which does not contain it
Run stift tidy to bring it up to date.
stift: Two projects provide the system "alexandria":
gitlab.common-lisp.net/alexandria/alexandria, required by example.org/cl-foo
example.org/cl-bar, in vendor/alexandria/, required by example.org/me/app
If they are copies of one library, keep one with an entry in :replace, such as
("https://example.org/cl-bar.git" :with "https://gitlab.common-lisp.net/alexandria/alexandria.git" :commit "...")
If one carries a copy of the other in its tree, leave the copy out with
:exclude on the requirement of the project that carries it, such as
:exclude ("vendor/").
stift: /home/me/engine/stiftwork: The project in /home/me/engine/cl-icu/,
fakehacker.cc/dxtr/cl-icu, is not a member of the workspace. Add it with
stift work use /home/me/engine/cl-icu/, or leave the workspace out, for one
command with --no-workspace, or for all with STIFT_WORKSPACE=off.
stift: /home/me/hello/vendor/projects: The copies in vendor/ were made for
other requirements or replacements than the stiftfile's: it has changed
since stift vendor copied its build list. Run stift vendor to copy the
build list it makes, or delete vendor/ to build from stift's cache.
stift: The system "hello" names no build operation, so there is nothing to
build. Give its defsystem one, such as :build-operation "program-op" with
:build-pathname and :entry-point for an executable.
stift: The tag "v1.2.0" of example.org/someone/foo has moved:
recorded c4b9472bff2f
now da612ad392b5
See what changed with
git -C /home/me/.cache/stift/git/example.org/someone/foo.git diff c4b9472bff2f da612ad392b5
and accept the new commit with
stift get https://example.org/someone/foo.git@v1.2.0
Errors of the setup file
The setup file signals plain errors, since stift is not loaded with it.
Their messages start with stift: :
- a directory of the build list is missing: start the Lisp with
stift exec, which makes it again; - something besides the build list finds systems, such as
asdf:*central-registry*or Quicklisp's search: thecontinuerestart removes them; - a system is loaded already from elsewhere: start a new Lisp.