Next: Introduction, Previous: (dir), Up: (dir) [Contents][Index]
This is the qlot Reference Manual, version 1.0.1, generated automatically by Declt version 4.0 beta 2 "William Riker" on Mon Aug 15 05:39:39 2022 GMT+0.
Next: Systems, Previous: The qlot Reference Manual, Up: The qlot Reference Manual [Contents][Index]
Qlot (pronounced kyü-'lät
, like culotte) is a project-local library installer using Quicklisp facility. This aims to be like Bundler of Ruby or Carton of Perl.
# "qlfile" of "myapp"
git clack https://github.com/fukamachi/clack.git
github datafly fukamachi/datafly :branch v0.7.x
ql log4cl 2014-03-17
$ cd /path/to/myapp
# Installing libraries project-locally.
$ qlot install
# Updating depending libraries of a project.
$ qlot update
# Updating specific libraries
$ qlot update --project mito
# Execute a command with a project-local Quicklisp
$ qlot exec ros -S . run
$ qlot exec clackup app.lisp
We have Quicklisp, the central library registry. It made installation of libraries damn easy.
However, what only you can specify is the month of distribution. Which means you have to use all libraries of the same moment and you cannot use a newer/older version of a library for your project.
"local-projects/" or ASDF configurations may be a solution to this problem, but there are a couple of problems.
They are not project-local. If you have multiple projects that use the different version of the same library, it would be a problem.
They are difficult to fix the version or to update them. If your project need to work on other than your machine, for instance on other people's machine or on servers, the version of depending libraries should be the same.
This is what Qlot is trying to solve.
(ql:quickload :qlot)
It also can be installed with Roswell.
$ ros install qlot
# Install the latest version from GitHub
$ ros install fukamachi/qlot
It's almost the same as using Quicklisp, except it also introduces a shell command "qlot".
$ which qlot
/Users/nitro_idiot/.roswell/bin/qlot
$ qlot
Usage: qlot COMMAND [ARGS..]
COMMANDS:
install
Installs libraries to './.qlot'.
update
Makes './.qlot' up-to-date and update 'qlfile.lock'.
Possible to update specific projects with --project option.
ex) qlot update --project mito
add [project name]
add [source] [project name] [arg1, arg2..]
Add a new library to qlfile and trigger 'qlot install'. (experimental)
ex)
$ qlot add mito # Add 'ql mito'
$ qlot add ql mito # Same as the above
$ qlot add ultralisp egao1980-cl-idna
$ qlot add github datafly fukamachi/datafly
run
Starts REPL with the project local Quicklisp dists (Same as 'qlot exec ros run').
exec [shell-args..]
Invokes the following shell-command with the project local Quicklisp.
bundle
Bundles project dependencies to './.bundle-libs'.
Load './.bundle-libs/bundle.lisp' to make them available.
Read https://www.quicklisp.org/beta/bundles.html for the detail.
OPTIONS:
--version
Show the Qlot version
--debug
A flag to enable debug logging. (Only for 'install' or 'update')
--no-deps
Don't install dependencies of all systems from the current directory.
--cache [directory]
Keep intermediate files for fast reinstallation.
$ docker pull fukamachi/qlot
Put a file "qlfile" at the root of your project directory.
See qlfile syntax section to know how to write it.
You can install libraries into the project directory via:
$ qlot install
It creates .qlot/
directory in the project directory and a file qlfile.lock
.
qlfile.lock
is similar to qlfile
except the library versions are qualified. This will ensure that other developers or your deployment environment use exactly the same versions of libraries you just installed.
Make sure you add qlfile
and qlfile.lock
to your version controlled repository and make the .qlot/
directory ignored.
$ echo .qlot/ >> .gitignore
$ git add qlfile qlfile.lock
$ git commit -m 'Start using Qlot.'
You can update the content of .qlot/
directory via:
$ qlot update
# Update a specific project
$ qlot update --project mito
$ qlot update --project mito,sxql
It will also overwrite qlfile.lock
.
qlot install
will install Quicklisp and libraries that declared in qlfile
project-locally. qlfile.lock
will be used with precedence if it exists.
$ qlot install
$ qlot install /path/to/myapp/qlfile
qlot update
will update the project-local .qlot/
directory using qlfile
.
$ qlot update
# Update a specific project
$ qlot update --project mito
$ qlot update --project mito,sxql
qlot add
will add a line to qlfile
and invoke qlot install
internally.
It's arguments are same as the qlfile syntax.
$ qlot add mito # ql mito
$ qlot add ql mito # ql mito (Same as the above)
$ qlot add ultralisp egao1980-cl-idna # ultralisp egao1980-cl-idna
$ qlot add github datafly fukamachi/datafly # github datafly fukamachi/datafly
qlot exec
does following:
CL_SOURCE_REGISTRY
environment variable by adding a current directory;bin
directory to the PATH
environment variable;Here are few usefull commands:
qlot exec ros emacs
- starts Emacs for development. Inferior lisp will use only
systems, installed by qlot install
. If you want to use systems from directories other than
current and ./.qlot/
, then set CL_SOURCE_REGISTRY
variable before starting qlot
.
This can be useful in case, if you have development versions of some systems, for example,
in ~/common-lisp/
directory and want to use them during project development:
CL_SOURCE_REGISTRY=~/common-lisp// qlot exec ros emacs
Read more about CL_SOURCE_REGISTRY
in
asdf's documentation.
qlot exec ros build some-app.ros
- another command, useful, to build a binary
from systems, fixed in qlfile
and qlfile.lock
. This way you can be sure that your builds are stable.
qlfile
syntax"qlfile" is a collection of Quicklisp dist declarations. Each line of that represents a dist.
<source> <project name> [arg1, arg2..]
Currently, <source>
must be one of dist
, ql
, ultralisp
, http
, git
or github
.
ql <project name> <version>
ql <project name>
ql
source will download libraries from Quicklisp official dist.
If you want to use Clack in Quicklisp dist of January 13, 2014, qlfile would be like this.
ql clack 2014-01-13
ultralisp <project name> <version>
ultralisp <project name>
ultralisp
is same as ql
except downloading from Ultralisp.
http <project name> <url> [<file md5>]
http
source will download a tarball.
http yason http://netzhansa.com/yason.tar.gz
git <project name> <repos url>
git <project name> <repos url> :ref <commit ref>
git <project name> <repos url> :branch <branch name>
git <project name> <repos url> :tag <tag name>
git
source will download libraries from a public git repository.
git clack https://github.com/fukamachi/clack.git
You can also specify :ref
, :branch
or :tag
.
git clack https://github.com/fukamachi/clack.git :branch develop
git datafly https://github.com/fukamachi/datafly.git :tag v0.7.4
git cl-dbi https://github.com/fukamachi/cl-dbi.git :ref 54928984e5756e92ba298aae51de8b95a6b0cf4b
Qlot doesn't authenticate itself, but retrieving from private repository can be done via git's SSH key authentication. Which means, if the current user can git clone
, Qlot also would be possible to do it.
git myapp git@github.com:somewrite-adtech/myapp
github <project name> <repos>
github <project name> <repos> :ref <commit ref>
github <project name> <repos> :branch <branch name>
github <project name> <repos> :tag <tag name>
github
source is similar to git
, but it is specifically for GitHub. As it uses GitHub API and tarballs GitHub serves, it doesn't require "git" command.
github datafly fukamachi/datafly
github datafly fukamachi/datafly :branch develop
dist <dist name> <distribution URL> [<dist version>]
dist
allows to use a custom Quicklisp dist, like Ultralisp.
dist quicklisp http://beta.quicklisp.org/dist/quicklisp.txt
dist ultralisp http://dist.ultralisp.org/
If multiple distributions provide the same library, lower one would take priority over higher ones.
SLIME is the most popular development environment in Common Lisp. However, its REPL always loads the global Quicklisp, not the project-local one.
Here's quick steps to start project-local REPL with SLIME:
init.el
.(defun slime-qlot-exec (directory)
(interactive (list (read-directory-name "Project directory: ")))
(slime-start :program "qlot"
:program-args '("exec" "ros" "-S" "." "run")
:directory directory
:name 'qlot
:env (list (concat "PATH=" (mapconcat 'identity exec-path ":")))))
M-x slime-qlot-exec RET /path/to/project/
.PROJECT_ROOT/.qlot/local-projects
can be used for local git repositories. Symbolic links are also be accessible in Qlot environment.
Copyright (c) 2014 Eitaro Fukamachi (e.arrows@gmail.com)
Licensed under the MIT License
Next: Files, Previous: Introduction, Up: The qlot Reference Manual [Contents][Index]
The main system appears first, followed by any subsystem dependency.
A project-local library installer
Next: qlot/install, Previous: qlot, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/install/quicklisp, Previous: qlot/main, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/logger, Previous: qlot/install, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/proxy, Previous: qlot/install/quicklisp, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/utils, Previous: qlot/logger, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/utils/shell, Previous: qlot/proxy, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/utils/tmp, Previous: qlot/utils, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
qlot/logger (system).
Next: qlot/source, Previous: qlot/utils/shell, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
qlot/utils (system).
Next: qlot/source/base, Previous: qlot/utils/tmp, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/errors, Previous: qlot/source, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/source/ql, Previous: qlot/source/base, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/source/dist, Previous: qlot/errors, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/utils/ql, Previous: qlot/source/ql, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/source/git, Previous: qlot/source/dist, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
qlot/utils (system).
Next: qlot/source/http, Previous: qlot/utils/ql, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/source/github, Previous: qlot/source/git, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/source/ultralisp, Previous: qlot/source/http, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/parser, Previous: qlot/source/github, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/server, Previous: qlot/source/ultralisp, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/utils/asdf, Previous: qlot/parser, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/utils/project, Previous: qlot/server, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: qlot/bundle, Previous: qlot/utils/asdf, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Previous: qlot/utils/project, Up: Systems [Contents][Index]
Eitaro Fukamachi
MIT
Next: Packages, Previous: Systems, Up: The qlot Reference Manual [Contents][Index]
Files are sorted by type and then listed depth-first from the systems components trees.
Next: qlot/main/file-type.lisp, Previous: Lisp, Up: Lisp [Contents][Index]
qlot (system).
Next: qlot/install/file-type.lisp, Previous: qlot/qlot.asd, Up: Lisp [Contents][Index]
qlot/main (system).
qlot.
Next: qlot/install/quicklisp/file-type.lisp, Previous: qlot/main/file-type.lisp, Up: Lisp [Contents][Index]
qlot/install (system).
Next: qlot/logger/file-type.lisp, Previous: qlot/install/file-type.lisp, Up: Lisp [Contents][Index]
qlot/install/quicklisp (system).
install-quicklisp (function).
fetch-installer (function).
Next: qlot/proxy/file-type.lisp, Previous: qlot/install/quicklisp/file-type.lisp, Up: Lisp [Contents][Index]
qlot/logger (system).
Next: qlot/utils/file-type.lisp, Previous: qlot/logger/file-type.lisp, Up: Lisp [Contents][Index]
qlot/proxy (system).
*proxy* (special variable).
qlot-http-fetch (function).
Next: qlot/utils/shell/file-type.lisp, Previous: qlot/proxy/file-type.lisp, Up: Lisp [Contents][Index]
qlot/utils (system).
Next: qlot/utils/tmp/file-type.lisp, Previous: qlot/utils/file-type.lisp, Up: Lisp [Contents][Index]
qlot/utils/shell (system).
Next: qlot/source/file-type.lisp, Previous: qlot/utils/shell/file-type.lisp, Up: Lisp [Contents][Index]
qlot/utils/tmp (system).
Next: qlot/source/base/file-type.lisp, Previous: qlot/utils/tmp/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source (system).
Next: qlot/errors/file-type.lisp, Previous: qlot/source/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source/base (system).
Next: qlot/source/ql/file-type.lisp, Previous: qlot/source/base/file-type.lisp, Up: Lisp [Contents][Index]
qlot/errors (system).
qlot-syntax-error (condition).
Next: qlot/source/dist/file-type.lisp, Previous: qlot/errors/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source/ql (system).
Next: qlot/utils/ql/file-type.lisp, Previous: qlot/source/ql/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source/dist (system).
Next: qlot/source/git/file-type.lisp, Previous: qlot/source/dist/file-type.lisp, Up: Lisp [Contents][Index]
qlot/utils/ql (system).
Next: qlot/source/http/file-type.lisp, Previous: qlot/utils/ql/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source/git (system).
source-git-identifier (function).
Next: qlot/source/github/file-type.lisp, Previous: qlot/source/git/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source/http (system).
Next: qlot/source/ultralisp/file-type.lisp, Previous: qlot/source/http/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source/github (system).
Next: qlot/parser/file-type.lisp, Previous: qlot/source/github/file-type.lisp, Up: Lisp [Contents][Index]
qlot/source/ultralisp (system).
Next: qlot/server/file-type.lisp, Previous: qlot/source/ultralisp/file-type.lisp, Up: Lisp [Contents][Index]
qlot/parser (system).
Next: qlot/utils/asdf/file-type.lisp, Previous: qlot/parser/file-type.lisp, Up: Lisp [Contents][Index]
qlot/server (system).
Next: qlot/utils/project/file-type.lisp, Previous: qlot/server/file-type.lisp, Up: Lisp [Contents][Index]
qlot/utils/asdf (system).
Next: qlot/bundle/file-type.lisp, Previous: qlot/utils/asdf/file-type.lisp, Up: Lisp [Contents][Index]
qlot/utils/project (system).
*default-qlfile* (special variable).
Previous: qlot/utils/project/file-type.lisp, Up: Lisp [Contents][Index]
qlot/bundle (system).
bundle-project (function).
Next: Definitions, Previous: Files, Up: The qlot Reference Manual [Contents][Index]
Packages are listed by definition order.
Next: qlot/bundle, Previous: Packages, Up: Packages [Contents][Index]
common-lisp.
Next: qlot/install, Previous: qlot/utils/ql, Up: Packages [Contents][Index]
common-lisp.
bundle-project (function).
Next: qlot/utils/shell, Previous: qlot/bundle, Up: Packages [Contents][Index]
common-lisp.
Next: qlot/errors, Previous: qlot/install, Up: Packages [Contents][Index]
common-lisp.
Next: qlot/source/ultralisp, Previous: qlot/utils/shell, Up: Packages [Contents][Index]
common-lisp.
qlot-syntax-error (condition).
Next: qlot/source/dist, Previous: qlot/errors, Up: Packages [Contents][Index]
qlot.source.ultralisp
source-ultralisp (class).
Next: qlot/source/git, Previous: qlot/source/ultralisp, Up: Packages [Contents][Index]
qlot.source.dist
Next: qlot/parser, Previous: qlot/source/dist, Up: Packages [Contents][Index]
qlot.source.git
source-git-identifier (function).
Next: qlot/source/ql, Previous: qlot/source/git, Up: Packages [Contents][Index]
common-lisp.
Next: qlot/source/github, Previous: qlot/parser, Up: Packages [Contents][Index]
qlot.source.ql
Next: qlot/utils/project, Previous: qlot/source/ql, Up: Packages [Contents][Index]
qlot.source.github
Next: qlot/source/http, Previous: qlot/source/github, Up: Packages [Contents][Index]
common-lisp.
*default-qlfile* (special variable).
Next: qlot/utils, Previous: qlot/utils/project, Up: Packages [Contents][Index]
qlot.source.http
Next: qlot/source/base, Previous: qlot/source/http, Up: Packages [Contents][Index]
qlot/util
common-lisp.
Next: qlot/logger, Previous: qlot/utils, Up: Packages [Contents][Index]
common-lisp.
Next: qlot/utils/tmp, Previous: qlot/source/base, Up: Packages [Contents][Index]
common-lisp.
Next: qlot/install/quicklisp, Previous: qlot/logger, Up: Packages [Contents][Index]
common-lisp.
Next: qlot/source, Previous: qlot/utils/tmp, Up: Packages [Contents][Index]
common-lisp.
install-quicklisp (function).
fetch-installer (function).
Next: qlot/proxy, Previous: qlot/install/quicklisp, Up: Packages [Contents][Index]
Next: qlot, Previous: qlot/source, Up: Packages [Contents][Index]
common-lisp.
*proxy* (special variable).
Next: qlot/server, Previous: qlot/proxy, Up: Packages [Contents][Index]
qlot/main
common-lisp.
Next: qlot/utils/asdf, Previous: qlot, Up: Packages [Contents][Index]
common-lisp.
Previous: qlot/server, Up: Packages [Contents][Index]
common-lisp.
Next: Indexes, Previous: Packages, Up: The qlot Reference Manual [Contents][Index]
Definitions are sorted by export status, category, package, and then by lexicographic order.
Next: Internals, Previous: Definitions, Up: Definitions [Contents][Index]
Next: Macros, Previous: Public Interface, Up: Public Interface [Contents][Index]
Next: Ordinary functions, Previous: Special variables, Up: Public Interface [Contents][Index]
Next: Generic functions, Previous: Macros, Up: Public Interface [Contents][Index]
This function differ from alexandria:make-keyword because it upcases text before making it a keyword.
Add all entries from FROM-TABLE to TO-TABLE, overwriting existing entries with the same key.
qlot.
Read ’qlfile’ (or ’qlfile.lock’ if exists) and return sources.
This adds the latest ’quicklisp’ dist implicitly if no ’quicklisp’ project exists in the file.
If :ignore-lock is T, read ’qlfile’ even when ’qlfile.lock’ exists.
If :projects is specified, read only those projects from qlfile.lock.
Next: Standalone methods, Previous: Ordinary functions, Up: Public Interface [Contents][Index]
Receives a keyword, denoting a source type and returns an instance of such source.
automatically generated reader method
automatically generated writer method
automatically generated reader method
automatically generated writer method
automatically generated reader method
automatically generated writer method
automatically generated reader method
ref.
automatically generated writer method
ref.
automatically generated reader method
automatically generated writer method
automatically generated reader method
tag.
automatically generated writer method
tag.
automatically generated reader method
automatically generated writer method
automatically generated reader method
ref.
automatically generated writer method
ref.
automatically generated reader method
automatically generated writer method
automatically generated reader method
tag.
automatically generated writer method
tag.
automatically generated reader method
automatically generated writer method
automatically generated reader method
url.
automatically generated writer method
url.
Next: Conditions, Previous: Generic functions, Up: Public Interface [Contents][Index]
Next: Classes, Previous: Standalone methods, Up: Public Interface [Contents][Index]
:command
:name
error.
:message
:name
Previous: Conditions, Up: Public Interface [Contents][Index]
A representation of each lines of qlfile
:project-name
This slot is read-only.
:version
This slot is read-only.
(quote nil)
:distribution
Initarg | Value |
---|---|
:distribution | (quicklisp-distinfo-url) |
Previous: Public Interface, Up: Definitions [Contents][Index]
Next: Ordinary functions, Previous: Special variables, Up: Internals [Contents][Index]
Next: Conditions, Previous: Macros, Up: Internals [Contents][Index]
default scheme-function for http protocol.
http-fetch.
Previous: Ordinary functions, Up: Internals [Contents][Index]
Previous: Definitions, Up: The qlot Reference Manual [Contents][Index]
Jump to: | %
(
-
A B C D E F G I L M O P Q R S T U W |
---|
Jump to: | %
(
-
A B C D E F G I L M O P Q R S T U W |
---|
Next: Data types, Previous: Functions, Up: Indexes [Contents][Index]
Jump to: | %
*
A B C D E F I L M N P R S T U V |
---|
Jump to: | %
*
A B C D E F I L M N P R S T U V |
---|
Jump to: | C D F I P Q R S U |
---|
Jump to: | C D F I P Q R S U |
---|