Skip to content

Wanted: A way to load (and potentially download) the quicklisp version of a system, ignoring non-quicklisp versions #92

Open
Hexstream opened this Issue Feb 5, 2014 · 3 comments

2 participants

@Hexstream

I'm not sure if there's already a direct way to do this or not, but I didn't find it.

Right now, if I understood correctly, doing (ql:quickload "foo") will always prefer to load the non-quicklisp version if ASDF can find one. This is usually the right thing to do.

But once in a while, one might really want quicklisp to load the quicklisp version of the system, first downloading it if necessary, acting as if there wasn't already another (local, non-quicklisp) version ASDF can find.

So maybe there should be a way to do (ql:quickload "foo" :non-quicklisp-versions :ignore) or (ql:quickload "foo" :ignore-non-quicklisp t) or (ql:quickload "foo" :force-quicklisp-version t) or something like that.


Here's the situation that prompted me to request this feature:

I use my CLHS wrapper (http://www.hexstreamsoft.com/libraries/clhs/) to access CLHS pages locally, for instance CLHS DEFCLASS is at file:///home/hexstream/quicklisp/HyperSpec/Body/m_defcla.htm

In this URL, HyperSpec is a symlink (created by the CLHS wrapper) to the copy of the CLHS bundled with the CLHS wrapper (dists/quicklisp/software/clhs-0.6.1/HyperSpec-7-0/HyperSpec/ for instance).

The problem was that I had a local (development) version of the CLHS wrapper on my ASDF path*, so quicklisp wouldn't download its own version. The symlink was thus essentially pointing nowhere. I had to temporarily move my development version of the CLHS wrapper where ASDF wouldn't find it to force quicklisp to install its own version.

  • Nowadays I have a directory with all branches of all my projects checked out, for easy context-switching between projects.

Conclusion:

That was somewhat inconvenient and I figure there must be other cases where someone would want to force (down)loading of the quicklisp version of something even though ASDF can find a non-quicklisp version.

I guess a new feature like (ql:ensure-installed "foo") would also work for my use-case.

@quicklisp
Owner
@Hexstream

Using (ql:use-only-quicklisp-systems) is certainly much better than temporarily moving directories out of the way like I did. It works well.

The only potential problem I see with it is that there doesn't seem to be an easy way to revert its behavior. After doing the install again to test this better way, I restarted the image to go back to the normal behavior. That wasn't a problem since my image didn't have any state I cared about, but in the general case it might be a bit more bothersome than necessary.


I think the ideal, complete solution would be to have a ql:using-only-quicklisp-systems macro that would temporarily enact the effect of (ql:use-only-quicklisp-systems), execute its body and then revert to the previous behavior.

If this feature existed, the following simple code would do exactly what I wanted:

(ql:using-only-quicklisp-systems ()
  (ql:quickload "clhs"))

This would be a nice addition that (it seems to me) would cover many use cases and wouldn't require updating the signatures of any existing functions.

@quicklisp
Owner
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.