Skip to content


Subversion checkout URL

You can clone with
Download ZIP

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
  • 2 commits
  • 4 files changed
  • 0 commit comments
  • 1 contributor
Commits on Aug 14, 2012
@xach xach Be more selective about what errors trigger missing dependency autolo…

asdf-utils failed because of a missing dependency on ASDF, but it
wasn't just ASDF, but a particular version of ASDF. Quicklisp didn't
distinguish the error correctly and kept trying (and succeeding) to
load an ASDF that did not satisfy the dependency.

This is fixed in two ways.

First, handle the ASDF:MISSING-DEPENDENCY-OF-VERSION error, and
resignal it instead of trying to autoload the dependency it describes.

Second, keep track of which dependencies have been loaded already, and
signal an error if a loop appears.

Fixes quicklisp/quicklisp-projects#352
@xach xach Update version to 2012081400. 8ab21de
Showing with 18 additions and 5 deletions.
  1. +1 −1  http.lisp
  2. +1 −1  quicklisp.asd
  3. +15 −2 setup.lisp
  4. +1 −1  version.txt
2  http.lisp
@@ -350,7 +350,7 @@ information."
(encode (subseq string start limit))))))
;; FIXME: Be more configurable, and take/set the version from
;; somewhere else.
- (format nil "quicklisp-client/2012010700 ~A/~A"
+ (format nil "quicklisp-client/2012081400 ~A/~A"
(encode (lisp-implementation-type))
(version-string (lisp-implementation-version)))))
2  quicklisp.asd
@@ -5,7 +5,7 @@
:author "Zach Beane <>"
:license "BSD-style"
:serial t
- :version "2012010700"
+ :version "2012081400"
:components ((:file "package")
(:file "utils")
(:file "config")
17 setup.lisp
@@ -156,20 +156,33 @@
(asdf:oos 'asdf:load-op (name strategy) :verbose nil))))
(defun autoload-system-and-dependencies (name &key prompt)
+ "Try to load the system named by NAME, automatically loading any
+Quicklisp-provided systems first, and catching ASDF missing
+dependencies too if possible."
(setf name (string-downcase name))
(with-simple-restart (abort "Give up on ~S" name)
- (let ((strategy (compute-load-strategy name)))
+ (let ((strategy (compute-load-strategy name))
+ (tried-so-far (make-hash-table :test 'equalp)))
(show-load-strategy strategy)
(when (or (not prompt)
- ((asdf:missing-dependency
+ ((asdf:missing-dependency-of-version
+ (lambda (c)
+ ;; Nothing Quicklisp can do to recover from this, so
+ ;; just resignal
+ (error c)))
+ (asdf:missing-dependency
(lambda (c)
(let ((parent (asdf::missing-required-by c))
(missing (asdf::missing-requires c)))
(when (typep parent 'asdf:system)
+ (if (gethash missing tried-so-far)
+ (error "Dependency looping -- already tried to load ~
+ ~A" missing)
+ (setf (gethash missing tried-so-far) missing))
(autoload-system-and-dependencies missing
:prompt prompt)
(go retry))))))
2  version.txt
@@ -1 +1 @@

No commit comments for this range

Something went wrong with that request. Please try again.