7 Errors
dxtr edited this page 2026-10-16 22:45:31 +02:00

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: the continue restart removes them;
  • a system is loaded already from elsewhere: start a new Lisp.