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

Comments

Projects
None yet
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

This comment has been minimized.

Show comment
Hide comment
@quicklisp

quicklisp Feb 12, 2014

Owner

Does (ql:use-only-quicklisp-systems) do what you want?

Owner

quicklisp commented Feb 12, 2014

Does (ql:use-only-quicklisp-systems) do what you want?

@Hexstream

This comment has been minimized.

Show comment
Hide comment
@Hexstream

Hexstream Feb 13, 2014

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.

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

This comment has been minimized.

Show comment
Hide comment
@quicklisp

quicklisp Feb 13, 2014

Owner

That sounds good to me, but my current understanding of ASDF's registry
system makes me think it would be very difficult to do.

Owner

quicklisp commented Feb 13, 2014

That sounds good to me, but my current understanding of ASDF's registry
system makes me think it would be very difficult to do.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment