core/MetacelloVersion.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 18 Sep 2012 13:10:10 +0000
changeset 14 f01fe37493e9
parent 11 d354ac2af7ec
child 16 25ac697dc747
permissions -rw-r--r--
- MetacelloProjectSpecForLoad added: #version_SVN - MetacelloRemoveMemberSpec added: #version_SVN - MetacelloValueHolderSpec added: #version_SVN - MetacelloProjectSpecGenerator added: #version_SVN - MetacelloPackagesSpec added: #version_SVN - MetacelloSemanticVersionNumber added: #version_SVN - MetacelloProjectSpecLoadError added: #version_SVN - MetacelloAddMemberSpec added: #version_SVN - MetacelloCannotUpdateReleasedVersionError added: #version_SVN - MetacelloMergeMemberSpec added: #version_SVN - MetacelloValidationFailure added: #version_SVN - MetacelloAllowProjectDowngrade added: #version_SVN - MetacelloVersion added: #version_SVN - MetacelloScriptApiExecutor added: #version_SVN - MetacelloScriptProjectSpecNotification added: #version_SVN - MetacelloAllowConflictingProjectUpgrade added: #version_SVN - MetacelloBaseConfiguration added: #version_SVN - MetacelloConflictingProjectError added: #version_SVN - MetacelloProjectRegistration added: #version_SVN - MetacelloValidationIssue added: #version_SVN - MetacelloSymbolicVersionDoesNotExistError added: #version_SVN - MetacelloClearStackCacheNotification added: #version_SVN - MetacelloVersionMethodSpec added: #version_SVN - MetacelloLookupProjectSpecForLoad added: #version_SVN - MetacelloSymbolicVersionNotDefinedError added: #version_SVN - MetacelloPackageSpecResolutionError added: #version_SVN - stx_goodies_metacello_core changed: #classNamesAndAttributes #extensionMethodNames #preRequisites - MetacelloValidationCriticalWarning added: #version_SVN - MetacelloStackCacheNotification added: #version_SVN - MetacelloVersionMethodSection added: #version_SVN - MetacelloProject added: #version_SVN - MetacelloErrorInProjectConstructionNotification added: #version_SVN - MetacelloGroupSpec added: #version_SVN - MetacelloAbstractConstructor added: #version_SVN - MetacelloConfigurationSpecGenerator added: #version_SVN - MetacelloVersionValidator added: #version_SVN - MetacelloSymbolicVersionMethodSpec added: #version_SVN - MetacelloScriptImageExecutor added: #version_SVN - MetacelloLockedProjectError added: #version_SVN - MetacelloProjectReferenceSpec added: #version_SVN - MetacelloLookupBaselineSpecForEnsureLoad added: #version_SVN - MetacelloToolBoxConstructor added: #version_SVN - MetacelloValidationError added: #version_SVN - MetacelloValidationWarning added: #version_SVN - MetacelloScriptGitHubDownloadNotification added: #version_SVN - MetacelloProjectSpecLoadedNotification added: #version_SVN - MetacelloScriptNotification added: #version_SVN - MetacelloScriptingError added: #version_SVN - MetacelloCopyMemberSpec added: #version_SVN - MetacelloScriptRegistryExecutor added: #version_SVN - MetacelloCleanNotification added: #version_SVN - MetacelloSpecLoader added: #version_SVN - MetacelloAllowProjectUpgrade added: #version_SVN - MetacelloValidationNotification added: #version_SVN - MetacelloScriptEnsureProjectLoadedForDevelopment added: #version_SVN - MetacelloScriptExecutor added: #version_SVN - MetacelloSpec added: #version_SVN - MetacelloCleanLoadAndTestsNotification added: #version_SVN - MetacelloMemberSpec added: #version_SVN - MetacelloProjectSpecLoadConflict added: #version_SVN - MetacelloResolveProjectUpgrade added: #version_SVN - MetacelloGenericProjectSpec added: #version_SVN - MetacelloMethodSpec added: #version_SVN - MetacelloVersionConstructor added: #version_SVN - MetacelloVersionDefinitionError added: #version_SVN - MetacelloBaselineConstructor added: #version_SVN - MetacelloScriptEngine added: #version_SVN - MetacelloUseUpgradeError added: #version_SVN - MetacelloSymbolicVersionSpec added: #version_SVN - MetacelloProjectSpec added: #version_SVN - MetacelloVersionDoesNotExistError added: #version_SVN - MetacelloMethodSectionPath added: #version_SVN - MetacelloCleanLoadNotification added: #version_SVN - MetacelloSkipDirtyPackageLoad added: #version_SVN - MetacelloPlatform added: #version_SVN changed: #createRepository: - MetacelloLookupProjectSpec added: #version_SVN - MetacelloMethodSection added: #version_SVN - MetacelloProjectRegistry added: #version_SVN - MetacelloMemberListSpec added: #version_SVN - MetacelloVersionSpec added: #version_SVN - MetacelloAbstractVersionConstructor added: #version_SVN - MetacelloVersionNumber added: #version_SVN - MetacelloAbstractPackageSpec added: #version_SVN - MetacelloBaselineSpecGenerator added: #version_SVN - extensions ...

"{ Package: 'stx:goodies/metacello/core' }"

Magnitude subclass:#MetacelloVersion
	instanceVariableNames:'spec versionNumber importedVersions versionStatus'
	classVariableNames:''
	poolDictionaries:''
	category:'Metacello-Core-Model'
!


!MetacelloVersion class methodsFor:'instance creation'!

fromSpec: aMetacelloVersionSpec

	^(self fromString: aMetacelloVersionSpec versionString) 
		spec: aMetacelloVersionSpec;
		yourself
!

fromString: aString

	^self new versionNumber: aString asMetacelloVersionNumber
! !

!MetacelloVersion methodsFor:'accessing'!

importedVersions

	importedVersions == nil ifTrue: [ importedVersions := #() ].
	^importedVersions
!

importedVersions: aCollection

	importedVersions := aCollection
!

projectLabel

	^self spec 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 spec ~~ nil
		ifTrue: [ 
			(label := self spec 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 spec blessing value
!

description

	^self spec description value
!

loader

	^self spec loader
!

project

	^self spec project
!

timestamp

	^self spec 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 spec ~~ nil
			ifTrue: [(label := self spec projectLabel) isEmpty
					ifFalse: [aStream nextPutAll: ' [' , label , ']']] ]
!

versionNumber

	^versionNumber
!

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::                                                                                                                        $'
! !