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. |