MetacelloGenericProjectSpec.st
author jv
Mon, 03 Sep 2012 11:13:41 +0000
changeset 1 9e312de5f694
permissions -rw-r--r--
- Initial commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     1
"{ Package: 'stx:goodies/metacello' }"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     2
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     3
MetacelloProjectSpec subclass:#MetacelloGenericProjectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     4
	instanceVariableNames:'projectPackage repositories'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     5
	classVariableNames:''
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     6
	poolDictionaries:''
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     7
	category:'Metacello-Core-Specs'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     8
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     9
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    10
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    11
!MetacelloGenericProjectSpec methodsFor:'accessing'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    12
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    13
getRepositories
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    14
    "raw access to iv"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    15
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    16
    ^ repositories
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    17
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    18
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    19
name: aString
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    20
    super name: aString.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    21
    self projectPackage: nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    22
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    23
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    24
projectPackage
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    25
    self subclassResponsibility
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    26
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    27
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    28
projectPackage: aProjectPackage
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    29
    self shouldBeMutable.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    30
    projectPackage := aProjectPackage
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    31
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    32
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    33
repositories
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    34
    repositories ifNil: [ repositories := self project repositoriesSpec ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    35
    ^ repositories
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    36
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    37
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    38
repositories: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    39
    self shouldBeMutable.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    40
    repositories := anObject.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    41
    self projectPackage: nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    42
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    43
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    44
repository: aStringOrMetacelloRepositorySpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    45
    self repositories repository: aStringOrMetacelloRepositorySpec.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    46
    self projectPackage: nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    47
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    48
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    49
repository: aString username: username password: password
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    50
    self repositories repository: aString username: username password: password.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    51
    self projectPackage: nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    52
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    53
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    54
!MetacelloGenericProjectSpec methodsFor:'construction'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    55
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    56
projectPackage: aBlock constructor: aVersionConstructor
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    57
    aVersionConstructor projectPackageForProject: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    58
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    59
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    60
repositories: aBlock constructor: aVersionConstructor
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    61
    aVersionConstructor repositoriesForProject: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    62
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    63
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    64
repository: anObject constructor: aVersionConstructor
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    65
    aVersionConstructor repositoryForProject: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    66
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    67
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    68
repository: aString username: username password: password constructor: aVersionConstructor
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    69
    aVersionConstructor repositoryForProject: aString username: username password: password
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    70
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    71
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    72
!MetacelloGenericProjectSpec methodsFor:'copying'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    73
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    74
postCopy
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    75
    super postCopy.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    76
    repositories := repositories copy.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    77
    projectPackage := nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    78
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    79
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    80
!MetacelloGenericProjectSpec methodsFor:'loading'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    81
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    82
determineCurrentVersionForLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    83
    self subclassResponsibility
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    84
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    85
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    86
load
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    87
    (MetacelloLookupProjectSpecForLoad new
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    88
        projectSpec: self;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    89
        yourself) signal performLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    90
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    91
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    92
loadVersion: aVersionOrNil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    93
    self subclassResponsibility
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    94
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    95
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    96
!MetacelloGenericProjectSpec methodsFor:'merging'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    97
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    98
mergeMap
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    99
    | map |
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   100
    map := super mergeMap.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   101
    map at: #'repositories' put: repositories.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   102
    ^ map
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   103
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   104
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   105
mergeSpec: anotherSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   106
    | newSpec map anotherRepositories |
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   107
    newSpec := super mergeSpec: anotherSpec.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   108
    map := anotherSpec mergeMap.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   109
    (anotherRepositories := map at: #'repositories') ~~ nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   110
        ifTrue: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   111
            newSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   112
                repositories:
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   113
                    (self getRepositories == nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   114
                        ifTrue: [ anotherRepositories ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   115
                        ifFalse: [ self repositories mergeSpec: anotherRepositories ]) ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   116
    ^ newSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   117
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   118
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   119
nonOverridable
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   120
    ^ super nonOverridable , #(#'projectPackage' #'repositories')
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   121
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   122
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   123
!MetacelloGenericProjectSpec methodsFor:'querying'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   124
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   125
repository
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   126
    | specs |
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   127
    self deprecated: 'Use repositories or repositorySpecs'.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   128
    (specs := self repositorySpecs) isEmpty
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   129
        ifTrue: [ ^ nil ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   130
    ^ specs first
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   131
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   132
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   133
repositoryDescriptions
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   134
    ^ self repositorySpecs collect: [ :repoSpec | repoSpec description ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   135
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   136
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   137
repositorySpecs
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   138
    repositories ifNil: [ ^ #() ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   139
    ^ self repositories map values
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   140
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   141
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   142
!MetacelloGenericProjectSpec methodsFor:'scripting'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   143
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   144
compareEqual: aMetacelloProjectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   145
    "'projectPackage repositories'"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   146
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   147
    ^ (super compareEqual: aMetacelloProjectSpec)
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   148
        and: [ self repositories compareEqual: aMetacelloProjectSpec repositories ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   149
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   150
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   151
mergeScriptRepository: anotherSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   152
    self repositories: anotherSpec repositories
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   153
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   154
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   155
metacelloRegistrationHash
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   156
    "projectPackage (ignored) repositories"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   157
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   158
    ^ super metacelloRegistrationHash bitXor: self repositories metacelloRegistrationHash
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   159
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   160
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   161
!MetacelloGenericProjectSpec methodsFor:'testing'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   162
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   163
hasRepository
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   164
    ^ self repositorySpecs notEmpty
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   165
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   166
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   167
!MetacelloGenericProjectSpec class methodsFor:'documentation'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   168
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   169
version_SVN
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   170
    ^ '$Id::                                                                                                                        $'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   171
! !