fukamachi / qlot

A project-local library installer for Common Lisp
https://qlot.tech
MIT License
465 stars 39 forks source link

Installing from github pegs the CPU at 100% #277

Open regularfry opened 1 month ago

regularfry commented 1 month ago

Describe the bug

Installing from a github source never completes, it just seems to go into a busy-loop with one core sat at 100%. This example is from attempting to get (asdf:test-system) to work on an otherwise new cl-project project.

Reproducible steps

  1. qlot init 2:
  $ qlot add github dissect Shinmera/dissect :ref a70cabc
Add 'github dissect Shinmera/dissect :ref a70cabc' to 'qlfile'.
Reading '/home/alex/src/ghlisp/qlfile'...                      
Already have dist "quicklisp" version "2023-10-21".
Already have dist "rove" version "ql-2023-10-21".  
Installing dist "dissect".                       
Extracting a tarball.   

Error messages

There are no errors, the process never halts. If I interrupt it with ctrl-c then no error message is given.

The ps entry looks like this:

/home/alex/.roswell/impls/x86-64/linux/sbcl-bin/2.4.8/bin/sbcl --core /home/alex/.roswell/impls/x86-64/linux/sbcl-bin/2.4.8/lib/sbcl/sbcl.core --noinform --no-sysinit --no-userinit --eval (progn #-ros.init(cl:load "/usr/local/etc/roswell/init.lisp")) --eval (ros:run '((:eval "(require 'asdf)")(:eval "(setf *debugger-hook* (lambda (c parent) (declare (ignore parent)) (format *error-output* \"~&Error: ~A~%\" c) (uiop/image:quit -1)))")(:eval "(push #P\"/home/alex/.roswell/lisp/quicklisp/dists/quicklisp/software/qlot-20231021-git/\" asdf/system-registry:*central-registry*)")(:eval "(setf asdf/source-registry:*default-source-registries* (quote (asdf/source-registry:environment-source-registry asdf/source-registry:system-source-registry asdf/source-registry:system-source-registry-directory)))")(:eval "(load #P\"/home/alex/.roswell/lisp/quicklisp/setup.lisp\")")(:eval "(uiop/package:symbol-call :ql :quickload \"qlot/distify\" :silent t)")(:eval "(let ((*error-output* (make-broadcast-stream))) (load (merge-pathnames #P\"setup.lisp\" #P\"/home/alex/src/ghlisp/.qlot/\")))")(:eval "(setf qlot/color:*enable-color* nil)")(:eval "(uiop/package:symbol-call :qlot/distify :distify (qlot/source/base:defrost-source (make-instance (quote qlot/source/github:source-github) :project-name \"dissect\" :repos \"Shinmera/dissect\" :ref \"a70cabc\" :branch nil :tag nil)) #P\"/tmp/qlot-LPSWZT2G/\" :distinfo-only nil)")(:hook)(:quit)))

Versions:

regularfry commented 1 month ago

Replacing the github source with a git source works around the issue.

fukamachi commented 1 month ago

Qlot 1.2.13 is too old. Install the latest version from GitHub by running ros install fukamachi/qlot/1.5.10.

regularfry commented 1 month ago

Sorry, I don't seem to be able to. Apologies for not being able to figure this out, as someone unfamiliar with the ecosystem it's unclear how I should do that.

  $ qlot --version
Qlot 1.2.13

  $ ros run
* (ql:uninstall "qlot")
T
* 
  $ ros install fukamachi/qlot/1.5.10
Installing from github fukamachi/qlot
To load "qlot":
  Load 1 ASDF system:
    asdf
  Install 1 Quicklisp release:
    qlot
Downloading http://beta.quicklisp.org/archive/qlot/2023-10-21/qlot-20231021-git.tgz
##########################################################################
; Loading "qlot"

[1/3] System 'qlot' found. Loading the system..
[2/3] Processing build-hook..
[3/3] Attempting to install the scripts in roswell/ subdirectory of the system...
Found 1 scripts: qlot
/home/alex/.roswell/bin/qlot

  $ qlot --version
Qlot 1.2.13

I feel like there's something I'm missing here. What's the right way to be purging the old version? Do I need to be removing the whole ~/.roswell directory?

fukamachi commented 1 month ago

Oh, sorry, I may have told you the wrong method. Perhaps Roswell can't accept installation with tag names.

ros install fukamachi/qlot fetches from the master branch, so it'd work. It places the source under ~/.roswell/local-projects/fukamachi/qlot. You can do anything with git command there, like git checkout 1.5.10.

Even when you feel something wrong with it, you don't need to delete the whole ~/.roswell directory. Just delete ~/.roswell/local-projects/fukamachi/qlot, and try it again.