redist
2.0.0An extensive system to manage and create quicklisp distributions.
About Redist
This is a system implementing facilities to produce Quicklisp distributions. Specifically, it implements the following:
Scanning of ASD files to discover system definitions and dependencies, without having to load the ASD or any systems in question.
A protocol to describe the objects related to dists, projects, and releases.
A mechanism to serialise and restore these objects to retain the information across images.
Integrations with source control systems to both clone and update project source files.
Parsers for the quicklisp-projects information, making it possible to create a dist just like the official "quicklisp" dist.
A compiler that takes the project source files and dist information to produce the tarballs and metadata files Quicklisp expects for a dist. Ultimately you can just point an HTTP server at the output directory and your dist setup is complete.
A testing system to allow compiling each of the systems in a dist release, and verify that they still perform as expected.
Quickstart (Binary)
You can download a precompiled binary of Redist from the releases, or create it yourself by cloning Redist and using:
sbcl --eval '(asdf:make :redist)'
You should end up with a redist
binary. When you invoke it, it should spill out a help that explains all the options and parameters. For a quickstart, first create your dist:
./redist add-dist my-dist --url "http://my.public.url"
Then create the projects you want to add:
./redist add https://github.com/someone/my-project.git
./redist add https://someone.com/project.tgz
This will create a sources/
directory where each project's source files are kept.
Finally you can compile the dist files:
./redist compile -v
Once your dist has been compiled, it'll have created a releases/
directory. You can simply copy this file to a static HTML server or serve them directly using nginx or similar.
In the future to create a new dist release, you can simply invoke:
./redist compile -vu
To update all the projects, first. The -v
flag prints output. You can also add -j 4
or similar to speed up the process by running it on multiple threads.
Systemd Service
On most Linux systems you can set up a Systemd service file like /etc/systemd/system/redist.service
[Unit]
Description=Redist Distribution Compilation
After=network.target
[Service]
Type=oneshot
ExecStart=/home/redist/redist compile -vuj
WorkingDirectory=/home/redist
User=redist
Group=redist
Assuming there's a redist
user that holds the redist
binary and all the data. You can then trigger a recompile via systemctl start redist
.
If you want to automatically rather than manually trigger compiles, you can also create a timer file like /etc/systemd/system/redist.timer
[Unit]
Description=Redist Releases
[Timer]
OnCalendar=monthly
Persistent=true
[Install]
WantedBy=timers.target
And enable it via systemctl enable redist.timer
. Now an automatic release will be triggered every month.
Quickstart (Lisp)
Creating your own dist is rather simple:
(redist:define-project my-project
((:git "https://github.com/someone/my-project.git")))
(redist:define-project other-project
((:http "https://someone.com/project.tgz")))
(redist:define-dist my-dist (my-project other-project)
:url "http://my.public.url")
This will create the dist
object including project
s and clone their sources to disk. If there's any problems with the cloning process, it will signal an error and allow you to continue in several ways.
Once a dist is set up, you'll want to serialise its current configuration to disk to ensure you can restore it at a later point when you want to update it.
(redist:store T T T)
(redist:retrieve T T T)
This will save all the information to disk in a distinfo.lisp
file and an accompanying directory of bits. The directory structure is important to allow it to load information lazily as it's needed. Over time, the entire history of a dist is stored that way, which can grow quite large. Lazy loading is important to make sure startup remains snappy.
Once you have the dist set up with all the projects you'd like, it is time to make a release. To do so, simply call compile
.
(redist:compile 'my-dist)
This will produce the necessary tarballs and metadata files. All you have to do now to make it accessible, is to point an HTTP server at the URL you declared earlier to the releases
directory. Note that as of now, the Quicklisp client cannot talk HTTPS, so you must make your server accessible over plain HTTP.
Once a dist release has been produced, you should persist
the changes, to ensure that when you create a new release it can share archives of projects that have not updated, and that it can properly regenerate the dist version index.
Should you want to add or remove projects from a dist later, you can simply redefine your dist, or use the functions add-project
and remove-project
, if you prefer. You can also maintain multiple dists with different sets of projects and different release schedules. The dists will share the archives whenever project versions coincide.
In order to update the project sources, you can either individually update
a project, or pass :update T
to compile
. Additionally, if you'd prefer some extra output, since creating a release can take a while, you can also pass :verbose T
.
If you would like to produce a dist from the official quicklisp-projects, simply clone that repository and load its data in via parse-quicklisp-projects
. Be careful though, cloning all the repositories takes quite a while, and a few of the links have since broken.
HTML
Along with the actual dist files, Redist also generates a set of HTML. Specifically, it does so for:
The set of dists / projects you serve
Each dist
Each project
Each release
Each project release
This should help people explore the stuff you host on your servers without having to actually install the dist. It also helps to have a more interactive way to search through versions.
If you would like to customise how the pages look, please have a look at the files in the template/
directory. The HTML pages are generated using Clip, and the CSS is generated using LASS.
Programs
The following programs should be accessible for some features of Redist to operate:
curl
For sources hosted as bare archives and replicating distsbsdtar
For sources hosted as bare archives and replicating distsgit
For sources hosted in Git repositorieshg
For sources hosted in Mercurial repositoriesdarcs
For sources hosted in Darcs repositoriessvn
For sources hosted in Subversion repositoriescvs
For sources hosted in CVS repositories
System Information
Definition Index
-
ORG.SHIRAKUMO.REDIST
No documentation provided.-
EXTERNAL SPECIAL-VARIABLE *DEFAULT-OUTPUT-DIRECTORY*
Standard directory to put dist compilation results. See COMPILE
-
EXTERNAL SPECIAL-VARIABLE *STORAGE*
The default storage instance. See STORAGE (type)
-
EXTERNAL SPECIAL-VARIABLE *STORAGE-FILE*
The default storage file for storing things in. See STORAGE-FILE
-
EXTERNAL CLASS CVS
Source manager for CVS repositories. Requires the presence of the cvs binary. See SOURCE-MANAGER (type)
-
EXTERNAL CLASS DARCS
Source manager for Darcs repositories. Requires the presence of the darcs binary. See SOURCE-MANAGER (type)
-
EXTERNAL CLASS DATE-VERSIONED-DIST
A dist whose versioning scheme is a date at the version creation time. The timestamp is returned as a string that may be lexicographically ordered correctly. See DIST (type) See NEXT-VERSION
-
EXTERNAL CLASS DIST
Representation of a Quicklisp distribution. A distribution presents a source for software releases. As such, a dist encompasses a number of PROJECTs and a number of RELEASEs of a subset of those projects. You must not create instances of the base DIST type. You should instead instantiate a subclass, which implements the NEXT-VERSION method, such as INTEGER-VERSIONED-DIST or TIMESTAMP-VERSIONED-DIST. See NAME See URL See PROJECTS See RELEASES See EXCLUDED-PATHS See MAKE-RELEASE See FIND-PROJECT See FIND-RELEASE See NEXT-VERSION See COMPILE See INTEGER-VERSIONED-DIST (type) See TIMESTAMP-VERSIONED-DIST (type)
-
EXTERNAL CLASS DIST-SOURCE
Source manager for other quicklisp dists. Accepts the additional options: :PROJECT -- The name of the project in the dist to track. See SOURCE-MANAGER (type)
-
EXTERNAL CLASS GIT
Source manager for Git repositories. Requires the presence of the git binary. Accepts additional options: :BRANCH -- the specific branch to check out :TAG -- the specific tag to check out See SOURCE-MANAGER (type)
-
EXTERNAL CLASS GITHUB
Source manager for Github repositories. Accepts the additional options: :TRACK -- May be :RELEASE, in which case it will check out the tag of whichever release is latest on Github. See GIT (type) See SOURCE-MANAGER (type)
-
EXTERNAL CLASS GITLAB
Source manager for CVS repositories. Accepts the additional options: :TRACK -- May be :RELEASE, in which case it will check out the tag of whichever release is latest on Gitlab. :TOKEN -- The API token used to access the Gitlab API. See GIT (type) See SOURCE-MANAGER (type)
-
EXTERNAL CLASS HTTP
Source manager for simple files fetched over HTTP/S. Requires the presence of the curl binary. See SOURCE-MANAGER (type)
-
EXTERNAL CLASS INTEGER-VERSIONED-DIST
A dist whose versioning scheme is a simple monotonically increasing integer. See DIST (type) See NEXT-VERSION
-
EXTERNAL CLASS MERCURIAL
Source manager for Mercurial repositories. Requires the presence of the hg binary. See SOURCE-MANAGER (type)
-
EXTERNAL CLASS PLAINTEXT
Plaintext disk storage backend. This saves data files in several files that make lazy loading fast. All files are stored in the DIR, and the primary storage FILE just contains the ID counter and DIR path. See DIR See ID-COUNTER See STORAGE (type)
-
EXTERNAL CLASS PROJECT
Representation of a project to be distributed via a dist. A project encompasses a source from which source code is obtained, and a number of ASDF systems which are present within the source code. When a project is re/initialized, it will attempt to clone the project locally if it does not exist already, or if it is marked as inactive. If the cloning fails, a restart called DEACTIVATE is present, which will abort the clone and mark the project as deactivated instead. See NAME See SOURCE-DIRECTORY See SOURCES See RELEASES See DISABLED-P See EXCLUDED-SYSTEMS See EXCLUDED-PATHS See MAKE-RELEASE See SYSTEMS See REMOVE-PROJECT See ADD-PROJECT See UPDATE See CLONE See VERSION
-
EXTERNAL CLASS PROJECT-RELEASE
Represents a particular version snapshot of a project. See PROJECT (type) See PROJECT See VERSION See SYSTEMS See SOURCE-FILES See NAME See URL See ARCHIVE-MD5 See SOURCE-SHA1 See PATH See PREFIX
-
EXTERNAL CLASS RELEASE
Represents a snapshot of projects within a dist. A release encompasses a set of projects at a specific version within a dist, with a unique version naming this set. See DIST (type) See PROJECT-RELEASE (type) See PROJECT (type) See DIST See VERSION See PROJECTS See FIND-PROJECT See RELEASES-URL See SYSTEMS-URL See DIST-URL See RELEASES-PATH See SYSTEMS-PATH See DIST-PATH See COMPILE
-
EXTERNAL CLASS SOURCE-MANAGER
-
EXTERNAL CLASS STORAGE
Superclass for representations of a storage backend. Storage backends encode all the dist and project related metadata that redist accumulates as releases are made. In order to persist data between sessions, a storage backend is needed. Objects are persisted by calling STORE on them, and can be restored from their offline representation via RETRIEVE. Object data is retrieved lazily as needed. This is done because the amount of history being kept can grow quite large, and loading all the unneeded data would quickly become excessive. If you still need to reload everything into memory, you can use RETRIEVE-ALL. See *STORAGE* See FILE See OPEN-STORAGE See TRY-OPEN-STORAGE See LIST-STORAGE-FILE-TYPES See RETRIEVE See STORE See STORED-OBJECT (type) See RETRIEVE-ALL
-
EXTERNAL CLASS STORED-OBJECT
Superclass for objects that can be stored. If a slot is accessed that is unbound, it will automatically be retrieved from the storage if possible. See STORAGE (type) See STORED-P See ID
-
EXTERNAL CLASS SVN
Source manager for SVN repositories. Requires the presence of the svn binary. See SOURCE-MANAGER (type)
-
EXTERNAL CLASS SYSTEM
Represents an ASDF system definition. This is more stable than ASDF:SYSTEMs, as it directly encompasses the source file the definition is in, the project it stems from, and the list of all dependencies the system requires to be loaded, without having to parse (and thus potentially load) the actual system. See PROJECT See NAME See FILE See DEPENDENCIES
-
EXTERNAL CLASS TIMESTAMP-VERSIONED-DIST
A dist whose versioning scheme is a timestamp at the version creation time. The timestamp is returned as a string that may be lexicographically ordered correctly. See DIST (type) See NEXT-VERSION
-
EXTERNAL FUNCTION FIND-ALL-SYSTEMS
- ROOT
Returns all system definitions within the given directory, recursively. See FIND-ASD-FILES See FIND-FILE-SYSTEMS
-
EXTERNAL FUNCTION FIND-ASD-FILES
- ROOT
Returns all ASD files in the given directory, recursively. See FIND-ALL-SYSTEMS
-
EXTERNAL FUNCTION FIND-FILE-SYSTEMS
- FILE
Find all system definitions within the given file. Returns a list of the following structure: ((SYSTEM-NAME SYSTEM-DEPENDENCY*)*) See FIND-ALL-SYSTEMS
-
EXTERNAL FUNCTION LIST-STORAGE-FILE-TYPES
Returns a list of all known file types for which storage backends exist. See OPEN-STORAGE
-
EXTERNAL FUNCTION PARSE-QUICKLISP-PROJECTS
- ROOT
- &KEY
- SOURCE-DIRECTORY
- IF-DOES-NOT-EXIST
Parse all projects defined in the quicklisp-projects repository and update the dist. This will also parse the meta files that designate path and system exclusions. See PARSE-QUICKLISP-SOURCE-FILE See DIST (type)
-
EXTERNAL FUNCTION PARSE-QUICKLISP-SOURCE-FILE
- FILE
Parse the quicklisp source.txt file that contains source tracking information for a project. Returns a list of SOURCE-MANAGER instances as parsed from the file. See PARSE-QUICKLISP-SOURCE See SOURCE-MANAGER (type)
-
EXTERNAL FUNCTION QUICK-ADD-PROJECTS
- SOURCE-TYPE
- &REST
- URLS
No documentation provided. -
EXTERNAL FUNCTION REPLICATE-DIST
- DISTURL
- &KEY
- NAME
- TYPE
- VERBOSE
- DOWNLOAD-ARCHIVES
- CURRENT-VERSION-ONLY
Replicates the dist at the given URL. This will create a new DIST of the given TYPE. If CURRENT-VERSION-ONLY is true, only the latest release version of the dist is replicated. Otherwise, all versions are replicated. If DOWNLOAD-ARCHIVES is true, the software archives are downloaded as well. Otherwise, the dist project release URL will point to the original dist's archive location. If NAME is not given, the name from the dist info is used. If VERBOSE is passed, status updates about the process are printed. See REPLICATE-DIST-VERSION See DIST (type)
-
EXTERNAL FUNCTION REPLICATE-DIST-VERSION
- DIST
- URL
- &KEY
- VERBOSE
- DISTURL
- DOWNLOAD-ARCHIVES
Replicates a specific version of a dist at the given URL. DISTURL should be the primary URL of the distinfo file. If it is not given, it is inferred based on the URL of the dist and its name. If DOWNLOAD-ARCHIVES is true, the software archives are downloaded as well. Otherwise, the dist project release URL will point to the original dist's archive location. If VERBOSE is passed, status updates about the process are printed. See DIST (type) See RELEASE (type)
-
EXTERNAL FUNCTION STORAGE-FILE
Tries to find a suitable storage file. If *STORAGE-FILE* is unset this will look at the following directories in turn: *DEFAULT-SOURCE-DIRECTORY* ../ *DEFAULT-OUTPUT-DIRECTORY* ../ (USER-HOMEDIR-PATHNAME) dist/ And will try to find a file within those directories that has the name "distinfo" and a type for which a storage backend is defined. If no such file exists, it uses the first of the directories that exists and returns a distinfo path within that directory. See *STORAGE-FILE*
-
EXTERNAL FUNCTION TRY-OPEN-STORAGE
- &OPTIONAL
- FILE
Try to open the storage file. This sets *STORAGE* if the file exists and can be opened successfully. If the file does not exist, nothing is done. See *STORAGE* See STORAGE (type) See OPEN-STORAGE
-
EXTERNAL GENERIC-FUNCTION ADD-PROJECT
- PROJECT
- DIST
Adds a new project to the dist. If a project with the same name already exists, an error is signalled. The project may be specified by a pathname designating its source directory, or by another spec as described in PROJECTS. See PROJECTS See PROJECT (type) See DIST (type)
-
EXTERNAL GENERIC-FUNCTION ARCHIVE-MD5
- OBJECT
Accesses the MD5 hash of the project release's archive. See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION (SETF ARCHIVE-MD5)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION CLONE
- MANAGER
- &KEY
- VERSION
- VERBOSE
- &ALLOW-OTHER-KEYS
Attempts to clone the source code repository. You may specify a VERSION which, if possible, the SOURCE-MANAGER will try to fetch. If no VERSION is specified, the latest version is picked. The SIMPLE-INFERIORS:*CWD* must be within the directory to which the clone should be made. See SOURCE-MANAGER (type) See PROJECT (type) See UPDATE
-
EXTERNAL GENERIC-FUNCTION COMPILE
- THING
- &KEY
- OUTPUT
- IF-EXISTS
- VERBOSE
- FORCE
- VERSION
- UPDATE
- PROJECTS
- &ALLOW-OTHER-KEYS
Compile a dist release. When called with a DIST, will create a new release of the dist and compile that. Should this function exit abnormally, the RELEASE instance will be removed from the DIST again. When called with a RELEASE, creates a new dist release including metadata file and any potentially needed source archives for the projects. See DIST (type) See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION DEPENDENCIES
- OBJECT
Accesses the set of systems this system depends on. The set is a set of system names. See SYSTEM (type)
-
EXTERNAL GENERIC-FUNCTION (SETF DEPENDENCIES)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION DIR
- OBJECT
Accessor to the directory in which the plaintext files are stored. See PLAINTEXT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF DIR)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION DISABLED-P
- OBJECT
Accesses whether the project is considered active or not. Projects that are disabled are normally excluded from updates and new releases of a dist. See PROJECT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF DISABLED-P)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION DIST
- NAME
Accesses the dist under which this object was created. If passed a symbol, the dist with the given name is retrieved (if any). See DIST (type) See RELEASE (type) See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION (SETF DIST)
- DIST
- NAME
No documentation provided. -
EXTERNAL GENERIC-FUNCTION DIST-PATH
- DIST
Returns the local path at which the dist.txt file can be found for the release. See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION DIST-URL
- DIST
Returns the URL at which the dist.txt file can be found for the release. See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION EXCLUDED-PATHS
- OBJECT
Accesses the set of path exclusion pattern. Each item in the list should be a path, describing a pattern as follows: If the pattern is an absolute path, any path that is a subpath of the absolute path matches. If the pattern is a relative path, any path which contains the pattern at any point matches. Eg: || PATTERN | PATH | RESULT || || /foo/bar | /foo/bar | T || || /foo/bar | /foo/bar/baz | T || || /foo/bar | /baz/foo/bar | NIL || || /foo | /foo/bar | T || || foo | /foo/bar | T || || foo | /baz/foo/bar | T || || foo/bar | /baz/foo/bar | T || || foo | /baz/bar | NIL || See DIST (type) See PROJECT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF EXCLUDED-PATHS)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION EXCLUDED-SYSTEMS
- OBJECT
Accesses the list of systems which should be excluded from the list of provided systems by the project. The systems should be provided as string names. See PROJECT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF EXCLUDED-SYSTEMS)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION FILE
- OBJECT
Accesses the ASD file the system definition was found in. See SYSTEM (type)
-
EXTERNAL GENERIC-FUNCTION (SETF FILE)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION FIND-PROJECT
- NAME
- DIST
Returns the object identified by the given name on the DIST or RELEASE, if any. If no such object exists, NIL is returned. See DIST (type) See RELEASE (type) See PROJECT (type)
-
EXTERNAL GENERIC-FUNCTION FIND-RELEASE
- VERSION
- DIST
Returns the release identified by the given version on the DIST. If no such release exists, NIL is returned. See DIST (type) See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION ID
- OBJECT
Returns the ID of the object within the storage. Should the object not be stored when calling this, then the object is stored immediately in order to obtain an ID. See STORED-OBJECT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF ID)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION ID-COUNTER
- OBJECT
Accessor to the ID counter for new objects. You probably don't want to mess with this or you might end up losing objects due to ID collisions. See PLAINTEXT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF ID-COUNTER)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION MAKE-RELEASE
- THING
- &KEY
- UPDATE
- VERSION
- VERBOSE
- PROJECTS
Create a new release for the given object. You may optionally pass a VERSION to target, whether to UPDATE the projects involved, and whether to be VERBOSE about the goings-on. For a DIST release, you may also explicitly pass the list of PROJECTS to be included in the release. If UPDATE is passed, the involved PROJECTs are first UPDATEd. When making a release of an individual project, you must pass the DIST that a release is being made for, as well as the RELEASE object associated with the individual release. See UPDATE See DIST (type) See PROJECT (type) See RELEASE (type) See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION NAME
- OBJECT
Accesses the name of the object. See DIST (type) See PROJECT (type) See PROJECT-RELEASE (type) See SYSTEM (type)
-
EXTERNAL GENERIC-FUNCTION (SETF NAME)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION NEXT-VERSION
- DIST
Returns the next version for the dist that should be used as a release version identifier. Note that each invocation of this function must return an object that is not VERSION< to the object returned by the previous invocation. See DIST (type) See VERSION<
-
EXTERNAL GENERIC-FUNCTION OPEN-STORAGE
- FILE
- TYPE
Opens the storage file at the given path. TYPE must either be a known storage type, or T in which case it is inferred based on the file's type. If successful returns a STORAGE instance. See STORAGE (type)
-
EXTERNAL GENERIC-FUNCTION PARSE-QUICKLISP-SOURCE
- TYPE
- ARGS
Parses a quicklisp source definition. TYPE should be a symbol designating the type of source, and ARGS should be a list of strings designating the rest of the arguments on the source line. Returns a SOURCE-MANAGER or NIL. See SOURCE-MANAGER (type)
-
EXTERNAL GENERIC-FUNCTION PATH
- DIST
Returns the local path of the release's source archive. See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION PREFIX
- RELEASE
Returns the release's prefix. See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION PROJECT
- NAME
Accesses the project the release is spawned from. If passed a symbol or string, the project with the given name is retrieved (if any). See PROJECT (type) See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION (SETF PROJECT)
- PROJECT
- NAME
No documentation provided. -
EXTERNAL GENERIC-FUNCTION PROJECTS
- OBJECT
Accesses the set of projects associated with the object. In the case of a DIST, the set of projects may only increase, not decrease. If you attempt to remove projects, they will instead be deactivated. You may however add new projects this way. Any argument accepted by ADD-PROJECT will also work here and be appropriately coerced. In the case of a RELEASE, the set of instances is of PROJECT-RELEASEs instead. These PROJECT-RELEASEs may however belong to a different release, if the project's sources have not materially changed between the releases. You may add new project-releases onto this set by either including a PROJECT, a PROJECT-RELEASE, or a list of the following spec: (PROJECT &rest INITARGS &key SYSTEMS) SYSTEMS ::= ((NAME . INITARGS)*) See DIST (type) See RELEASE (type) See ADD-PROJECT See REMOVE-PROJECT
-
EXTERNAL GENERIC-FUNCTION (SETF PROJECTS)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION RELEASES
- OBJECT
Accesses the set of releases present on the DIST or PROJECT. When setting this place, the set is automatically ordered such that the latest version comes first. Each object in the set is also coerced to become a RELEASE instance, meaning that if it is not a RELEASE, it may either be a VERSION specifying the version at which a new release should be made, or a list of the following spec: (VERSION . INITARGS) Note that no two releases may have the same (under EQUAL) version. See MAKE-RELEASE See RELEASE (type) See PROJECT-RELEASE (type) See DIST (type) See PROJECT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF RELEASES)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION RELEASES-PATH
- DIST
Returns the local path at which the releases.txt file can be found for the release. See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION RELEASES-URL
- DIST
Returns the URL at which the releases.txt file can be found for the release. See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION REMOVE-PROJECT
- PROJECT
- DIST
Removes the given project from the dist. Note that this does not remove it entirely, it merely marks the project as inactive, so that it will effectively be removed from any future dist releases. See PROJECT (type) See DIST (type)
-
EXTERNAL GENERIC-FUNCTION RETRIEVE
- STORAGE
- OBJECT
- SLOT
Retrieves data about an object. SLOT may either be the name of a slot of the object to retrieve from the storage or T to retrieve all slots. OBJECT may also be T, in which case all objects are retrieved from the storage. OBJECT may also either be the symbols DIST or PROJECT, in which case if the SLOT is T, all respective objects are retrieved. If SLOT is a STRING, then the object with that specific NAME is retrieved if it exists. See STORAGE (type) See STORED-OBJECT (type)
-
EXTERNAL GENERIC-FUNCTION RETRIEVE-ALL
- DEFALUT
- THING
Exhaustively load all information from the storage. This ensures that all objects in the storage are loaded into memory, rather than the default lazy-loading approach. See RETRIEVE See STORAGE (type)
-
EXTERNAL GENERIC-FUNCTION SERIALIZE
- THING
Serialises the given object into an s-expression form.
-
EXTERNAL GENERIC-FUNCTION SOURCE-DIRECTORY
- OBJECT
Accesses the source directory to which the project's source files are cloned. See PROJECT (type)
-
EXTERNAL GENERIC-FUNCTION (SETF SOURCE-DIRECTORY)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION SOURCE-FILES
- PROJECT
Accesses the set of source files that are part of the release. These are pathnames indexing into the project's source-directory. See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION (SETF SOURCE-FILES)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION SOURCE-SHA1
- OBJECT
Accesses the SHA1 hash of the project release's source files. See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION (SETF SOURCE-SHA1)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION SOURCES
- OBJECT
Accesses the set of SOURCE-MANAGERs which manage the project's sources. When UPDATEing or CLONEing the project, this list is consulted in order to try to manage the project. This allows fallback sources to be instated in case links go stale or the network breaks down. See PROJECT (type) See SOURCE-MANAGER (type)
-
EXTERNAL GENERIC-FUNCTION (SETF SOURCES)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION STORE
- STORAGE
- OBJECT
- SLOT
Stores data about an object. SLOT may either be the name of a slot of the object to store into the storage or T to store all slots. OBJECT may also be T, in which case all objects are stored into the storage. OBJECT may also either be the symbols DIST or PROJECT, in which case if the SLOT is T, all respective objects are stored. See STORAGE (type) See STORED-OBJECT (type)
-
EXTERNAL GENERIC-FUNCTION STORED-P
- OBJECT
Returns true if the object has been stored. Note that this does not necessarily mean that the storage representation is up-to-date with the actual object's data. See STORED-OBJECT (type)
-
EXTERNAL GENERIC-FUNCTION SYSTEMS
- PROJECT
Accesses the set of system descriptions that are part of the release. See SYSTEM (type) See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION (SETF SYSTEMS)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION SYSTEMS-PATH
- RELEASE
Returns the local path at which the systems.txt file can be found for the release. See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION SYSTEMS-URL
- RELEASE
Returns the URL at which the systems.txt file can be found for the release. See RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION TIMESTAMP
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION (SETF TIMESTAMP)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION UPDATE
- MANAGER
- &KEY
- VERSION
- VERBOSE
- &ALLOW-OTHER-KEYS
Attempts to update the source code. You may specify a VERSION which, if possible, the SOURCE-MANAGER will try to fetch. If no VERSION is specified, the latest version is picked. The SIMPLE-INFERIORS:*CWD* must be within the local source code repository clone for this to work properly. See SOURCE-MANAGER (type) See PROJECT (type) See CLONE
-
EXTERNAL GENERIC-FUNCTION URL
- OBJECT
Accesses the URL at which the object is accessible in the context of a dist release. See DIST (type) See PROJECT-RELEASE (type) See SOURCE-MANAGER (type)
-
EXTERNAL GENERIC-FUNCTION (SETF URL)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION VERSION
- MANAGER
Returns the version of the given object. For a SOURCE-MANAGER this is the version of the source code it manages. The SIMPLE-INFERIORS:*CWD* must be within the local source code repository clone for this to work properly. For a RELEASE it is the version of the dist at which the release was created. For a PROJECT-RELEASE it is the version at which the PROJECT's SOURCE-MANAGER was at the time the release was created. For a PROJECT it returns the current version of the locally cloned source code. See SIMPLE-INFERIORS:*CWD* See SOURCE-MANAGER (type) See RELEASE (type) See PROJECT (type) See PROJECT-RELEASE (type)
-
EXTERNAL GENERIC-FUNCTION (SETF VERSION)
- NEW-VALUE
- OBJECT
No documentation provided. -
EXTERNAL GENERIC-FUNCTION VERSION<
- A
- B
Returns T if A is a version preceding B. A user may extend this with additional functions, but by default methods for REALs and STRINGs are provided.
-
EXTERNAL MACRO DEFINE-DIST
- NAME
- PROJECTS
- &BODY
- BODY
Macro to define a dist. The PROJECTS should be a list of project names to include in the dist. The BODY can be a set of initargs for the dist, followed by release descriptions: RELEASE ::= (version :projects (PROJECT*)) PROJECT ::= (name :version version) If a dist of the same name already exists, it is updated. See DIST (type) See RELEASE (type)
-
EXTERNAL MACRO DEFINE-PROJECT
- NAME
- SOURCES
- &BODY
- BODY
Macro to define a project. The SOURCES should be a list of source-manager descriptions: SOURCE-MANAGER ::= (type url initargs*) The BODY can be a set of initargs for the project, followed by release descriptions: RELEASE ::= (version :systems (SYSTEM*) initargs*) SYSTEM ::= (name initargs*) If a project of the same name already exists, it is updated. Note that the name is treated as a case-insensitive string. See PROJECT (type) See SOURCE-MANAGER (type) See PROJECT-RELEASE (type) See SYSTEM (type)
-