MetacelloProjectSpecForLoad.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 03 Sep 2012 13:10:51 +0000
changeset 3 504152ada1fc
parent 1 9e312de5f694
permissions -rw-r--r--
fixed stc-compilability
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:#MetacelloProjectSpecForLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
     4
	instanceVariableNames:'projectSpec useDetermineVersionForLoad overrideProjectSpec'
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-Scripts'
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
!MetacelloProjectSpecForLoad methodsFor:'accessing'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    12
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    13
overrideProjectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    14
	^ overrideProjectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    15
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    16
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    17
overrideProjectSpec: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    18
	overrideProjectSpec := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    19
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    20
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    21
projectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    22
	^ projectSpec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    23
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    24
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    25
projectSpec: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    26
	projectSpec := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    27
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    28
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    29
useDetermineVersionForLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    30
    useDetermineVersionForLoad ifNil: [ useDetermineVersionForLoad := true ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    31
    ^ useDetermineVersionForLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    32
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    33
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    34
useDetermineVersionForLoad: anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    35
	useDetermineVersionForLoad := anObject
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    36
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    37
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    38
!MetacelloProjectSpecForLoad methodsFor:'operations'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    39
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    40
performCurrentVersionTestAgainst: vrsn operator: anOperator targetVersionStatus: targetVersionStatus using: anMCLoader
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    41
    "answer true if the current state of image is to be left as is"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    42
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    43
    | currentVersion existing new |
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    44
    vrsn ifNil: [ ^ false ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    45
    self useDetermineVersionForLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    46
        ifTrue: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    47
            | prjct cv |
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    48
            self hasOverride
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    49
                ifTrue: [ self error: 'unexpected logic combination: useDeterminVersionForLoad & hasOverride' ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    50
            prjct := self projectSpec projectClassProject.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    51
            prjct loader: anMCLoader.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    52
            (cv := prjct currentVersion) == nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    53
                ifTrue: [ ^ false ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    54
            (targetVersionStatus includes: cv versionStatus)
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    55
                ifTrue: [ ^ cv perform: anOperator with: vrsn ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    56
            ^ false ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    57
    (self hasOverride not or: [ targetVersionStatus ~= #(#'allLoadedToSpec') ])
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    58
        ifTrue: [ ^ false ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    59
    (self overrideProjectSpec allPackagesLoaded: anMCLoader)
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    60
        ifFalse: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    61
            "roughly equivalent to versionStatus test above (#'allLoadedToSpec')"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    62
            ^ false ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    63
    (currentVersion := self overrideProjectSpec versionOrNil) ifNil: [ ^ false ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    64
    currentVersion = vrsn
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    65
        ifTrue: [ ^ true ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    66
    existing := self overrideProjectSpec asProjectRegistration.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    67
    new := self projectSpec asProjectRegistration.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    68
    ^ currentVersion > vrsn
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    69
        ifTrue: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    70
            "answer false if downgrade allowed"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    71
            (MetacelloAllowProjectDowngrade new
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    72
                existingProjectRegistration: existing;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    73
                newProjectRegistration: new;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    74
                signal) == existing ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    75
        ifFalse: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    76
            "answer false if upgrade allowed"
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    77
            (MetacelloAllowProjectUpgrade new
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    78
                existingProjectRegistration: existing;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    79
                newProjectRegistration: new;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    80
                signal) == existing ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    81
!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    82
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    83
performLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    84
    | displayString spec |
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    85
    spec := self projectSpec.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    86
    displayString := 'Project: ' , spec name.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    87
    spec versionString ~~ nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    88
        ifTrue: [ displayString := displayString , ' ' , spec versionString ].
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    89
    Transcript
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    90
        cr;
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    91
        show: displayString.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    92
    self hasOverride
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    93
        ifTrue: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    94
            | override |
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    95
            override := self overrideProjectSpec copy.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    96
            override mergeScriptLoads: spec.
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    97
            override loadVersion: nil ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    98
        ifFalse: [ 
9e312de5f694 - Initial commit
jv
parents:
diff changeset
    99
            spec
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   100
                loadVersion:
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   101
                    (self useDetermineVersionForLoad
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   102
                        ifTrue: [ spec determineCurrentVersionForLoad ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   103
                        ifFalse: [ spec versionOrNil ]) ]
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   104
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   105
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   106
!MetacelloProjectSpecForLoad methodsFor:'testing'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   107
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   108
hasOverride
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   109
    ^ self overrideProjectSpec ~~ nil
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   110
! !
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   111
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   112
!MetacelloProjectSpecForLoad class methodsFor:'documentation'!
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   113
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   114
version_SVN
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   115
    ^ '$Id::                                                                                                                        $'
9e312de5f694 - Initial commit
jv
parents:
diff changeset
   116
! !