MetacelloGenericProjectSpec.st
author jv
Mon, 03 Sep 2012 11:13:41 +0000
changeset 1 9e312de5f694
permissions -rw-r--r--
- Initial commit

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