SPL commands

An SPL is your product line, and its UVL model says which features exist and how they combine. These commands create a model, grow it, query it, and publish it so your products can pin it by DOI.

Command Description
spl:create Start a new model in its own working copy
spl:list List the models this workspace knows
spl:info Show where one model lives and what points at it
spl:features List the features of a model
spl:add-feature Add a feature, with the constraints its code implies
spl:remove-feature Remove a feature and the constraints naming it
spl:add-constraints Add the constraints the code needs and the model lacks
spl:deps Show what a feature requires, or what requires it
spl:configurations Count and list the valid configurations
spl:compare Compare two products by their features
spl:fetch Download a model from UVLHub by DOI
spl:publish Publish a model through the marketplace
spl:pin Record the model’s DOI in the active product
spl:outdated Report products pinned to an older model

Where a model lives

The three places a model is looked for, in order FIRST Working copy splent_spl_<name>/ THEN Cache .splent_cache/spls/ LAST UVLHub, by DOI no account needed every download is cached The product's pin gives the DOI, so a name alone can be downloaded.
The working copy always wins. The cache and UVLHub serve the published versions products pin.

Every spl:* command, and every product derivation, looks for a model in this order.

Place Path What it is
Working copy splent_spl_<name>/ Your own repository, where you edit the model. Nothing overwrites it
Cache .splent_cache/spls/<name>@<version>/ A downloaded release. Deleting it costs one download
UVLHub by DOI Where published models live. A download lands in the cache

A trailing _spl is dropped from the working copy’s directory, so my_spl lives in splent_spl_my/. A clone named splent_spl_my_spl/ is found too.

A cache entry is keyed on the version the pin records, else on the DOI (my_spl@10.5281_zenodo.10000003/), else on the bare name. Two products pinning two versions never share a directory.

A name alone cannot be downloaded, so each product records the DOI in its pyproject.toml with spl:pin. Deriving a product then needs only its repository and UVLHub.

The CLI ships a pin for sample_splent_spl, the line the tutorials use, so splent spl:fetch sample_splent_spl works in a fresh workspace. Any product, working copy or cache entry that records something else for that name wins over it.


Reading and writing

To Use You need
Read a model spl:fetch, straight from UVLHub Nothing, no account
Publish a model spl:publish, through the marketplace splent login

The marketplace holds the only UVLHub key, so you never create one.


Table of contents


Back to top

splent. Distributed by an LGPL license v3. Contact us: drorganvidez@us.es