The rosetta-project system is a framework for modeling and
analyzing software projects with a focus on inter-project
dependencies.
Support for concrete project natures is implemented in separate
systems such as rosetta-project-asdf.
A version is a sequence of components such that a prefix consists of non-negative integers and an optional suffix consists of arbitrary strings:
| String | Object | Components |
|---|---|---|
| “1.0” | #<VERSION 1.0 {1002763DB3}> | (1 0) |
| “1.0-alpha” | #<VERSION 1.0-alpha {1002765EE3}> | (1 0 “alpha”) |
The main operations on version objects are various comparisons:
| Operator | Left | Right | Result |
|---|---|---|---|
| ROSETTA-PROJECT.MODEL.VERSION:VERSION< | 1.0 | 1.0 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION< | 1.0 | 1.1 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION< | 1.1 | 1.0 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION< | 1.1 | 1.1 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION<= | 1.0 | 1.0 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION<= | 1.0 | 1.1 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION<= | 1.1 | 1.0 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION<= | 1.1 | 1.1 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION= | 1.0 | 1.0 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION= | 1.0 | 1.1 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION= | 1.1 | 1.0 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION= | 1.1 | 1.1 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION/= | 1.0 | 1.0 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION/= | 1.0 | 1.1 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION/= | 1.1 | 1.0 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION/= | 1.1 | 1.1 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.0 | 1.0 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.0 | 1.1 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.1 | 1.0 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.1 | 1.1 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.0 | 1.0 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.0 | 1.1 | NIL |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.1 | 1.0 | T |
| ROSETTA-PROJECT.MODEL.VERSION:VERSION>= | 1.1 | 1.1 | T |
The module also supports a limited form of logical expressions:
(defparameter *my-predicate*
(architecture.builder-protocol:with-builder ((make-instance 'rosetta.frontend::model-builder
:repository (make-instance 'rosetta.model.data::base-repository)))
(architecture.builder-protocol:node* (:version-connective :connective 'and)
(* :operand (list (architecture.builder-protocol:node* (:version-predicate :operator '>)
(1 :version (architecture.builder-protocol:node* (:version :name "1.3"))))
(architecture.builder-protocol:node* (:version-predicate :operator '<=)
(1 :version (architecture.builder-protocol:node* (:version :name "1.5")))))))))
*my-predicate*#<VERSION-AND (VERSION> 1.3) (VERSION<= 1.5) {205D79CB}>
These expressions can be evaluated against version objects:
(map 'list (lambda (version)
(list
version
(rosetta-project.model.version:version-matches
*my-predicate* (rosetta-project.model.version:make-version version))))
'("1.2.0" "1.2" "1.3" "1.4.0" "1.4" "1.4-alpha" "1.5" "1.6" "1.6-beta"))| Version | Satisfies predicate? |
|---|---|
| 1.2.0 | NIL |
| 1.2 | NIL |
| 1.3 | NIL |
| 1.4.0 | T |
| 1.4 | T |
| 1.4-alpha | T |
| 1.5 | T |
| 1.6 | NIL |
| 1.6-beta | NIL |
(rs.f:process :later #P"later" 'list)later
Analyses for the following project kinds are included:
| Name | Description |
|---|---|
| :PERSON | A name of a person, potentially with an email address. |
| :PERSON-LIST | A list of names, potentially with email addresses. |