"{ Package: 'stx:goodies/metacello' }"
Magnitude subclass:#MetacelloVersion
instanceVariableNames:'spec versionNumber importedVersions versionStatus'
classVariableNames:''
poolDictionaries:''
category:'Metacello-Core-Model'
!
!MetacelloVersion class methodsFor:'instance creation'!
fromSpec: aMetacelloVersionSpec
^ (self new versionNumber: aMetacelloVersionSpec versionNumber)
spec: aMetacelloVersionSpec;
yourself
!
fromString: aString
^self new versionNumber: aString asMetacelloVersionNumber
! !
!MetacelloVersion methodsFor:'accessing'!
basicSpec
^ self spec
!
importedVersions
importedVersions == nil ifTrue: [ importedVersions := #() ].
^importedVersions
!
importedVersions: aCollection
importedVersions := aCollection
!
projectLabel
^ self basicSpec projectLabel
!
spec
^spec
!
spec: aMetacellVersionSpec
spec := aMetacellVersionSpec
!
versionNumber: aVersionNumber
versionNumber := aVersionNumber
!
versionSpec
^self spec
!
versionStatus
versionStatus == nil ifTrue: [ versionStatus := self computeVersionStatus].
^versionStatus
!
versionStatus: aSymbol
versionStatus := aSymbol
! !
!MetacelloVersion methodsFor:'actions'!
load
^self subclassResponsibility
!
load: required
^self subclassResponsibility
!
unload
^self spec unload
! !
!MetacelloVersion methodsFor:'comparing'!
< aMetacelloVersion
aMetacelloVersion species = self species ifFalse: [ ^false ].
^self versionNumber < aMetacelloVersion versionNumber
!
= aMetacelloVersion
aMetacelloVersion species = self species ifFalse: [ ^false ].
^self versionNumber = aMetacelloVersion versionNumber
!
hash
^self versionNumber hash
!
~> aMetacelloVersion
aMetacelloVersion species = self species ifFalse: [ ^false ].
^self versionNumber ~> aMetacelloVersion versionNumber
! !
!MetacelloVersion methodsFor:'printing'!
printOn: aStream
| label vs |
self blessing ~~ #'broken'
ifTrue: [
(vs := self versionStatus) == #'somethingLoaded'
ifTrue: [ aStream nextPutAll: '<>' ].
vs == #'loadedMatchConstraints'
ifTrue: [ aStream nextPutAll: '>=' ].
vs == #'loadedToSpec'
ifTrue: [ aStream nextPut: $~ ] ].
self versionNumber printOn: aStream.
self basicSpec ~~ nil
ifTrue: [
(label := self projectLabel) isEmpty
ifFalse: [ aStream nextPutAll: ' [' , label , ']' ] ]
! !
!MetacelloVersion methodsFor:'private'!
computeVersionStatus
"
#allLoadedToSpec - all projects and packages are loaded and match specification
#loadedToSpec - all loaded projects and packages match specifications (at least one package loaded)
#loadedMatchConstraints - all loaded projects and packages match constraints (at least one package loaded)
#somethingLoaded - at least one package loaded
"
self spec computeVersionStatus: [ :status | ^ status ].
^ #noStatus
! !
!MetacelloVersion methodsFor:'querying'!
author
^self spec author value
!
blessing
^ self basicSpec blessing value
!
description
^ self basicSpec description value
!
loader
^self spec loader
!
project
^ self basicSpec project
!
timestamp
^ self basicSpec timestamp value
!
versionKey
"version printString, without the versionStatus decorations, suitable for using as a unique key for the
receiver in a dictionary"
^ String
streamContents: [ :aStream |
| label |
self versionNumber printOn: aStream.
self basicSpec ~~ nil
ifTrue: [
(label := self projectLabel) isEmpty
ifFalse: [ aStream nextPutAll: ' [' , label , ']' ] ] ]
!
versionNumber
^versionNumber
!
versionNumberFrom: aString
^ self versionNumber class fromString: aString
!
versionString
^self versionNumber versionString
! !
!MetacelloVersion methodsFor:'testing'!
isAllLoadedToSpec
"all projects and packages are loaded and match specification"
^self spec isAllLoadedToSpec
!
isLoadedMatchConstraints
"all loaded projects and packages match constraints"
^self spec isLoadedMatchConstraints
!
isLoadedToSpec
"all loaded projects and packages match specifications"
^self spec isLoadedToSpec
!
isPossibleBaseline
^self spec isPossibleBaseline
!
isSomethingLoaded
"at least one project or package has been loaded"
^self spec isSomethingLoaded
!
name
^self versionString
! !
!MetacelloVersion class methodsFor:'documentation'!
version_SVN
^ '$Id:: $'
! !