core/MetacelloScriptExecutor.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 10 Sep 2012 20:55:47 +0000
changeset 10 fd87600067b8
parent 3 MetacelloScriptExecutor.st@504152ada1fc
child 11 d354ac2af7ec
permissions -rw-r--r--
Metacello package refactoring - phase 1
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
Object subclass:#MetacelloScriptExecutor
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     4
	instanceVariableNames:'options roots singleRoot projectSpecGenerator actionArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     5
		configurationArg baselineArg projectArg classNameArg versionArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     6
		repositoryArg'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     7
	classVariableNames:''
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     8
	poolDictionaries:''
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     9
	category:'Metacello-Core-Scripts'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    10
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    11
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    12
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    13
!MetacelloScriptExecutor methodsFor:'accessing'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    14
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    15
options
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    16
    options ifNil: [ options := Dictionary new ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    17
    ^ options
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    18
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    19
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    20
roots
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    21
    roots ifNil: [ roots := OrderedCollection new ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    22
    ^ roots
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    23
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    24
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    25
singleRoot
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    26
    singleRoot ifNil: [ singleRoot := false ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    27
    ^ singleRoot
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    28
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    29
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    30
singleRoot: aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    31
    singleRoot := aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    32
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    33
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    34
!MetacelloScriptExecutor methodsFor:'actions api'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    35
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    36
fetch: required
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    37
    actionArg := #'fetch:' -> {required}
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    38
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    39
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    40
get
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    41
    actionArg := #'get' -> #()
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    42
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    43
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    44
list
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    45
    actionArg := #'list' -> #()
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    46
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    47
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    48
load: required
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    49
    actionArg := #'load:' -> {required}
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    50
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    51
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    52
lock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    53
    actionArg := #'lock' -> #()
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    54
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    55
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    56
record: required
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    57
    actionArg := #'record:' -> {required}
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    58
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    59
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    60
unlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    61
    actionArg := #'unlock' -> #()
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    62
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    63
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    64
!MetacelloScriptExecutor methodsFor:'args'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    65
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    66
baselineArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    67
	^ baselineArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    68
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    69
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    70
baselineArg: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    71
	baselineArg := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    72
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    73
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    74
classNameArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    75
    ^ classNameArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    76
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    77
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    78
classNameArg: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    79
    classNameArg := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    80
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    81
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    82
configurationArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    83
    ^ configurationArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    84
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    85
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    86
configurationArg: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    87
    configurationArg := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    88
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    89
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    90
projectArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    91
    ^ projectArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    92
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    93
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    94
projectArg: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    95
    projectArg := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    96
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    97
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    98
repositoryArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    99
    ^ repositoryArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   100
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   101
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   102
repositoryArg: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   103
    repositoryArg := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   104
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   105
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   106
versionArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   107
    ^ versionArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   108
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   109
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   110
versionArg: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   111
    versionArg := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   112
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   113
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   114
!MetacelloScriptExecutor methodsFor:'execution'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   115
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   116
applyArgsToProjectSpec: aProjectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   117
    classNameArg ifNotNil: [ aProjectSpec className: classNameArg ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   118
    versionArg ifNotNil: [ aProjectSpec versionString: versionArg ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   119
    repositoryArg ifNotNil: [ aProjectSpec repository: repositoryArg ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   120
    ^ aProjectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   121
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   122
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   123
execute: statements
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   124
    statements
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   125
        do: [ :assoc | assoc value ifNil: [ self perform: assoc key ] ifNotNil: [ self perform: assoc key withArguments: assoc value ] ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   126
    projectSpecGenerator := self projectSpecGenerator.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   127
    projectSpecGenerator target
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   128
        execute: [ :projectSpec | 
3
504152ada1fc fixed stc-compilability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   129
            | engine root |
1
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   130
            engine := MetacelloScriptEngine new
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   131
                options: self options copy;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   132
                projectSpec: projectSpec;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   133
                yourself.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   134
            engine perform: actionArg key withArguments: actionArg value.
3
504152ada1fc fixed stc-compilability
Jan Vrany <jan.vrany@fit.cvut.cz>
parents: 1
diff changeset
   135
            (root := engine root) ifNotNil: [  self roots add: root ] ]
1
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   136
        against: self.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   137
    ^ (self singleRoot and: [ self roots size == 1 ])
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   138
        ifTrue: [ self roots first ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   139
        ifFalse: [ self roots ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   140
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   141
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   142
projectSpecGenerator
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   143
    baselineArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   144
        ifNotNil: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   145
            configurationArg ifNotNil: [ self error: ' baseline: and configuration: are both be specified' ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   146
            projectArg ifNotNil: [ self error: ' baseline: and project are both be specified' ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   147
            ^ MetacelloBaselineSpecGenerator new
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   148
                target: baselineArg;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   149
                yourself ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   150
    configurationArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   151
        ifNotNil: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   152
            baselineArg ifNotNil: [ self error: ' baseline: and configuration: are both be specified' ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   153
            projectArg ifNotNil: [ self error: ' configuration and project are both be specified' ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   154
            ^ MetacelloConfigurationSpecGenerator new
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   155
                target: configurationArg;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   156
                yourself ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   157
    projectArg
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   158
        ifNotNil: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   159
            configurationArg ifNotNil: [ self error: ' project and configuration: are both be specified' ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   160
            baselineArg ifNotNil: [ self error: ' baseline: and project are both be specified' ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   161
            ^ MetacelloProjectSpecGenerator new
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   162
                target: projectArg;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   163
                yourself ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   164
    self error: 'project, baseline, or configuration not specified'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   165
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   166
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   167
!MetacelloScriptExecutor methodsFor:'execution callback'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   168
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   169
executeBlock: selectBlock do: projectSpecBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   170
    ((projectSpecGenerator projectSpecListBlock value select: selectBlock) select: self projectSpecSelectBlock)
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   171
        do: [ :projectSpec | projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   172
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   173
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   174
executeCollection: aCollection do: projectSpecBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   175
    aCollection
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   176
        do: [ :projectName | 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   177
            ((projectSpecGenerator projectSpecLookupBlock value: projectName) select: self projectSpecSelectBlock)
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   178
                do: [ :projectSpec | projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ] ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   179
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   180
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   181
executeString: aString do: projectSpecBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   182
    self singleRoot: true.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   183
    ((projectSpecGenerator projectSpecLookupBlock value: aString) select: self projectSpecSelectBlock)
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   184
        do: [ :projectSpec | projectSpecBlock value: (self applyArgsToProjectSpec: projectSpec copy) ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   185
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   186
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   187
projectSpecSelectBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   188
    ^ [ :projectSpec | true ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   189
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   190
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   191
!MetacelloScriptExecutor methodsFor:'options api'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   192
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   193
cacheRepository: aRepositoryDescription
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   194
    self options at: #'cacheRepository' put: aRepositoryDescription
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   195
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   196
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   197
ignoreImage: aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   198
    self options at: #'ignoreImage' put: aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   199
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   200
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   201
onConflict: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   202
    self options at: #'onConflict' put: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   203
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   204
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   205
onDowngrade: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   206
    self options at: #'onDowngrade' put: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   207
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   208
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   209
onUpgrade: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   210
    self options at: #'onUpgrade' put: aBlock
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   211
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   212
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   213
repositoryOverrides: aRepositoryDescriptionList
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   214
    self options at: #'repositoryOverrides' put: aRepositoryDescriptionList
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   215
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   216
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   217
silently: aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   218
    self options at: #'silently' put: aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   219
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   220
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   221
useCurrentVersion: aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   222
    "private option used to implement the classic mode"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   223
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   224
    self options at: #'useCurrentVersion' put: aBool
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   225
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   226
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   227
!MetacelloScriptExecutor class methodsFor:'documentation'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   228
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   229
version_SVN
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   230
    ^ '$Id::                                                                                                                        $'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   231
! !