"{ Package: 'stx:goodies/metacello' }"
MetacelloProjectSpec subclass:#MetacelloGenericProjectSpec
instanceVariableNames:'projectPackage repositories'
classVariableNames:''
poolDictionaries:''
category:'Metacello-Core-Specs'
!
!MetacelloGenericProjectSpec methodsFor:'accessing'!
getRepositories
"raw access to iv"
^ repositories
!
name: aString
super name: aString.
self projectPackage: nil
!
projectPackage
self subclassResponsibility
!
projectPackage: aProjectPackage
self shouldBeMutable.
projectPackage := aProjectPackage
!
repositories
repositories ifNil: [ repositories := self project repositoriesSpec ].
^ repositories
!
repositories: anObject
self shouldBeMutable.
repositories := anObject.
self projectPackage: nil
!
repository: aStringOrMetacelloRepositorySpec
self repositories repository: aStringOrMetacelloRepositorySpec.
self projectPackage: nil
!
repository: aString username: username password: password
self repositories repository: aString username: username password: password.
self projectPackage: nil
! !
!MetacelloGenericProjectSpec methodsFor:'construction'!
projectPackage: aBlock constructor: aVersionConstructor
aVersionConstructor projectPackageForProject: aBlock
!
repositories: aBlock constructor: aVersionConstructor
aVersionConstructor repositoriesForProject: aBlock
!
repository: anObject constructor: aVersionConstructor
aVersionConstructor repositoryForProject: anObject
!
repository: aString username: username password: password constructor: aVersionConstructor
aVersionConstructor repositoryForProject: aString username: username password: password
! !
!MetacelloGenericProjectSpec methodsFor:'copying'!
postCopy
super postCopy.
repositories := repositories copy.
projectPackage := nil
! !
!MetacelloGenericProjectSpec methodsFor:'loading'!
determineCurrentVersionForLoad
self subclassResponsibility
!
load
(MetacelloLookupProjectSpecForLoad new
projectSpec: self;
yourself) signal performLoad
!
loadVersion: aVersionOrNil
self subclassResponsibility
! !
!MetacelloGenericProjectSpec methodsFor:'merging'!
mergeMap
| map |
map := super mergeMap.
map at: #'repositories' put: repositories.
^ map
!
mergeSpec: anotherSpec
| newSpec map anotherRepositories |
newSpec := super mergeSpec: anotherSpec.
map := anotherSpec mergeMap.
(anotherRepositories := map at: #'repositories') ~~ nil
ifTrue: [
newSpec
repositories:
(self getRepositories == nil
ifTrue: [ anotherRepositories ]
ifFalse: [ self repositories mergeSpec: anotherRepositories ]) ].
^ newSpec
!
nonOverridable
^ super nonOverridable , #(#'projectPackage' #'repositories')
! !
!MetacelloGenericProjectSpec methodsFor:'querying'!
repository
| specs |
self deprecated: 'Use repositories or repositorySpecs'.
(specs := self repositorySpecs) isEmpty
ifTrue: [ ^ nil ].
^ specs first
!
repositoryDescriptions
^ self repositorySpecs collect: [ :repoSpec | repoSpec description ]
!
repositorySpecs
repositories ifNil: [ ^ #() ].
^ self repositories map values
! !
!MetacelloGenericProjectSpec methodsFor:'scripting'!
compareEqual: aMetacelloProjectSpec
"'projectPackage repositories'"
^ (super compareEqual: aMetacelloProjectSpec)
and: [ self repositories compareEqual: aMetacelloProjectSpec repositories ]
!
mergeScriptRepository: anotherSpec
self repositories: anotherSpec repositories
!
metacelloRegistrationHash
"projectPackage (ignored) repositories"
^ super metacelloRegistrationHash bitXor: self repositories metacelloRegistrationHash
! !
!MetacelloGenericProjectSpec methodsFor:'testing'!
hasRepository
^ self repositorySpecs notEmpty
! !
!MetacelloGenericProjectSpec class methodsFor:'documentation'!
version_SVN
^ '$Id:: $'
! !