packages/StxPackageFileReader.st
author Claus Gittinger <cg@exept.de>
Sun, 23 Feb 2020 13:23:18 +0100
changeset 4553 2cbcb4f949e6
parent 1445 b8cc2792ab97
child 3011 1997ff6e7e55
permissions -rw-r--r--
#REFACTORING by exept class: HistoryManager changed: #addHistory:with:to:inSource:filter:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1445
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     1
"
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     2
 COPYRIGHT (c) 2003 by eXept Software AG
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     3
              All Rights Reserved
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     4
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     5
 This software is furnished under a license and may be used
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     6
 only in accordance with the terms of that license and with the
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     8
 be provided or otherwise made available to, or used by, any
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
     9
 other person.  No title to or ownership of the software is
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    10
 hereby transferred.
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    11
"
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    12
1230
2dcce6385978 initial checkin
james
parents:
diff changeset
    13
"{ Package: 'stx:libbasic3' }"
2dcce6385978 initial checkin
james
parents:
diff changeset
    14
2dcce6385978 initial checkin
james
parents:
diff changeset
    15
"{ NameSpace: Packages }"
2dcce6385978 initial checkin
james
parents:
diff changeset
    16
2dcce6385978 initial checkin
james
parents:
diff changeset
    17
Object subclass:#StxPackageFileReader
2dcce6385978 initial checkin
james
parents:
diff changeset
    18
	instanceVariableNames:'handler stream'
2dcce6385978 initial checkin
james
parents:
diff changeset
    19
	classVariableNames:''
2dcce6385978 initial checkin
james
parents:
diff changeset
    20
	poolDictionaries:''
2dcce6385978 initial checkin
james
parents:
diff changeset
    21
	category:'Package-Handlers'
2dcce6385978 initial checkin
james
parents:
diff changeset
    22
!
2dcce6385978 initial checkin
james
parents:
diff changeset
    23
2dcce6385978 initial checkin
james
parents:
diff changeset
    24
Object subclass:#Version1
2dcce6385978 initial checkin
james
parents:
diff changeset
    25
	instanceVariableNames:'filename package'
2dcce6385978 initial checkin
james
parents:
diff changeset
    26
	classVariableNames:''
2dcce6385978 initial checkin
james
parents:
diff changeset
    27
	poolDictionaries:''
2dcce6385978 initial checkin
james
parents:
diff changeset
    28
	privateIn:StxPackageFileReader
2dcce6385978 initial checkin
james
parents:
diff changeset
    29
!
2dcce6385978 initial checkin
james
parents:
diff changeset
    30
1445
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    31
!StxPackageFileReader class methodsFor:'documentation'!
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    32
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    33
copyright
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    34
"
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    35
 COPYRIGHT (c) 2003 by eXept Software AG
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    36
              All Rights Reserved
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    37
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    38
 This software is furnished under a license and may be used
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    39
 only in accordance with the terms of that license and with the
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    40
 inclusion of the above copyright notice.   This software may not
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    41
 be provided or otherwise made available to, or used by, any
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    42
 other person.  No title to or ownership of the software is
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    43
 hereby transferred.
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    44
"
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
    45
! !
1230
2dcce6385978 initial checkin
james
parents:
diff changeset
    46
2dcce6385978 initial checkin
james
parents:
diff changeset
    47
!StxPackageFileReader class methodsFor:'instance creation'!
2dcce6385978 initial checkin
james
parents:
diff changeset
    48
2dcce6385978 initial checkin
james
parents:
diff changeset
    49
forFilename:aFilename
2dcce6385978 initial checkin
james
parents:
diff changeset
    50
2dcce6385978 initial checkin
james
parents:
diff changeset
    51
    (self isFileVersion1:aFilename) ifTrue:[
2dcce6385978 initial checkin
james
parents:
diff changeset
    52
        ^ Version1 forFilename:aFilename
2dcce6385978 initial checkin
james
parents:
diff changeset
    53
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
    54
2dcce6385978 initial checkin
james
parents:
diff changeset
    55
    self error:'File type unknown'
2dcce6385978 initial checkin
james
parents:
diff changeset
    56
!
2dcce6385978 initial checkin
james
parents:
diff changeset
    57
2dcce6385978 initial checkin
james
parents:
diff changeset
    58
forPackage:aPackage 
2dcce6385978 initial checkin
james
parents:
diff changeset
    59
2dcce6385978 initial checkin
james
parents:
diff changeset
    60
    ^ (self version:1) forPackage:aPackage 
2dcce6385978 initial checkin
james
parents:
diff changeset
    61
!
2dcce6385978 initial checkin
james
parents:
diff changeset
    62
2dcce6385978 initial checkin
james
parents:
diff changeset
    63
version:aVersionNumber
2dcce6385978 initial checkin
james
parents:
diff changeset
    64
2dcce6385978 initial checkin
james
parents:
diff changeset
    65
    aVersionNumber == 1 ifTrue:[
2dcce6385978 initial checkin
james
parents:
diff changeset
    66
        ^ Version1.
2dcce6385978 initial checkin
james
parents:
diff changeset
    67
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
    68
    self error:'Version unknown'
2dcce6385978 initial checkin
james
parents:
diff changeset
    69
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
    70
2dcce6385978 initial checkin
james
parents:
diff changeset
    71
!StxPackageFileReader class methodsFor:'queries'!
2dcce6385978 initial checkin
james
parents:
diff changeset
    72
2dcce6385978 initial checkin
james
parents:
diff changeset
    73
isFileBase:aFilename
2dcce6385978 initial checkin
james
parents:
diff changeset
    74
    ^ false
2dcce6385978 initial checkin
james
parents:
diff changeset
    75
!
2dcce6385978 initial checkin
james
parents:
diff changeset
    76
2dcce6385978 initial checkin
james
parents:
diff changeset
    77
isFileVersion1:aFilename
2dcce6385978 initial checkin
james
parents:
diff changeset
    78
    ^ true
2dcce6385978 initial checkin
james
parents:
diff changeset
    79
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
    80
2dcce6385978 initial checkin
james
parents:
diff changeset
    81
!StxPackageFileReader::Version1 class methodsFor:'globals'!
2dcce6385978 initial checkin
james
parents:
diff changeset
    82
2dcce6385978 initial checkin
james
parents:
diff changeset
    83
smalltalkPackageManager
2dcce6385978 initial checkin
james
parents:
diff changeset
    84
    ^ PackageManager smalltalkPackageManager
2dcce6385978 initial checkin
james
parents:
diff changeset
    85
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
    86
2dcce6385978 initial checkin
james
parents:
diff changeset
    87
!StxPackageFileReader::Version1 class methodsFor:'instance creation'!
2dcce6385978 initial checkin
james
parents:
diff changeset
    88
2dcce6385978 initial checkin
james
parents:
diff changeset
    89
forFilename:aPackage
2dcce6385978 initial checkin
james
parents:
diff changeset
    90
    ^ self basicNew filename:aPackage
2dcce6385978 initial checkin
james
parents:
diff changeset
    91
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
    92
2dcce6385978 initial checkin
james
parents:
diff changeset
    93
!StxPackageFileReader::Version1 methodsFor:'accessing'!
2dcce6385978 initial checkin
james
parents:
diff changeset
    94
2dcce6385978 initial checkin
james
parents:
diff changeset
    95
filename
2dcce6385978 initial checkin
james
parents:
diff changeset
    96
    "return the value of the instance variable 'filename' (automatically generated)"
2dcce6385978 initial checkin
james
parents:
diff changeset
    97
2dcce6385978 initial checkin
james
parents:
diff changeset
    98
    ^ filename
2dcce6385978 initial checkin
james
parents:
diff changeset
    99
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   100
2dcce6385978 initial checkin
james
parents:
diff changeset
   101
filename:something
2dcce6385978 initial checkin
james
parents:
diff changeset
   102
    "set the value of the instance variable 'filename' (automatically generated)"
2dcce6385978 initial checkin
james
parents:
diff changeset
   103
2dcce6385978 initial checkin
james
parents:
diff changeset
   104
    filename := something.
2dcce6385978 initial checkin
james
parents:
diff changeset
   105
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   106
2dcce6385978 initial checkin
james
parents:
diff changeset
   107
package
2dcce6385978 initial checkin
james
parents:
diff changeset
   108
    "return the value of the instance variable 'package' (automatically generated)"
2dcce6385978 initial checkin
james
parents:
diff changeset
   109
2dcce6385978 initial checkin
james
parents:
diff changeset
   110
    ^ package
2dcce6385978 initial checkin
james
parents:
diff changeset
   111
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   112
2dcce6385978 initial checkin
james
parents:
diff changeset
   113
package:something
2dcce6385978 initial checkin
james
parents:
diff changeset
   114
    "set the value of the instance variable 'package' (automatically generated)"
2dcce6385978 initial checkin
james
parents:
diff changeset
   115
2dcce6385978 initial checkin
james
parents:
diff changeset
   116
    package := something.
2dcce6385978 initial checkin
james
parents:
diff changeset
   117
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   118
2dcce6385978 initial checkin
james
parents:
diff changeset
   119
!StxPackageFileReader::Version1 methodsFor:'api'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   120
2dcce6385978 initial checkin
james
parents:
diff changeset
   121
fileInFrom:aStream notifying:someone passChunk:passChunk single:single silent:beSilent 
2dcce6385978 initial checkin
james
parents:
diff changeset
   122
    "sent by a file browser or something similar"
2dcce6385978 initial checkin
james
parents:
diff changeset
   123
    | packageManager |
2dcce6385978 initial checkin
james
parents:
diff changeset
   124
2dcce6385978 initial checkin
james
parents:
diff changeset
   125
    packageManager := PackageManager smalltalkPackageManager.
2dcce6385978 initial checkin
james
parents:
diff changeset
   126
    packageManager ifNil:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   127
        self error: 'Error during fileIn'.
2dcce6385978 initial checkin
james
parents:
diff changeset
   128
        ^ self.
2dcce6385978 initial checkin
james
parents:
diff changeset
   129
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   130
2dcce6385978 initial checkin
james
parents:
diff changeset
   131
    package := (self getInitialPackageFromChunk:aStream nextChunk).
2dcce6385978 initial checkin
james
parents:
diff changeset
   132
    package ifNil:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   133
        self error: 'Error during fileIn'.
2dcce6385978 initial checkin
james
parents:
diff changeset
   134
        ^ self.
2dcce6385978 initial checkin
james
parents:
diff changeset
   135
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   136
2dcce6385978 initial checkin
james
parents:
diff changeset
   137
    self package:package.
2dcce6385978 initial checkin
james
parents:
diff changeset
   138
    self 
2dcce6385978 initial checkin
james
parents:
diff changeset
   139
        basicInstallPackage:package 
2dcce6385978 initial checkin
james
parents:
diff changeset
   140
        fromStream:aStream 
2dcce6385978 initial checkin
james
parents:
diff changeset
   141
        in:self class smalltalkPackageManager.
2dcce6385978 initial checkin
james
parents:
diff changeset
   142
2dcce6385978 initial checkin
james
parents:
diff changeset
   143
    packageManager addPackage:package.
2dcce6385978 initial checkin
james
parents:
diff changeset
   144
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   145
2dcce6385978 initial checkin
james
parents:
diff changeset
   146
installPackageIn:aPackageManager
2dcce6385978 initial checkin
james
parents:
diff changeset
   147
    (self checkOkToInstall:package).   "/ may produce errors
2dcce6385978 initial checkin
james
parents:
diff changeset
   148
    self basicInstallPackage:package in:aPackageManager.
2dcce6385978 initial checkin
james
parents:
diff changeset
   149
    ^ package
2dcce6385978 initial checkin
james
parents:
diff changeset
   150
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   151
2dcce6385978 initial checkin
james
parents:
diff changeset
   152
loadPackageIn:aPackageManager 
2dcce6385978 initial checkin
james
parents:
diff changeset
   153
2dcce6385978 initial checkin
james
parents:
diff changeset
   154
    |aStream aPackage|
2dcce6385978 initial checkin
james
parents:
diff changeset
   155
    self canReadFilename:filename.
2dcce6385978 initial checkin
james
parents:
diff changeset
   156
2dcce6385978 initial checkin
james
parents:
diff changeset
   157
    [
2dcce6385978 initial checkin
james
parents:
diff changeset
   158
        aStream := filename readStream.
2dcce6385978 initial checkin
james
parents:
diff changeset
   159
        aStream nextChunk.
2dcce6385978 initial checkin
james
parents:
diff changeset
   160
        aStream nextChunk.
2dcce6385978 initial checkin
james
parents:
diff changeset
   161
        aPackage := self getInitialPackageFromChunk:aStream nextChunk.
2dcce6385978 initial checkin
james
parents:
diff changeset
   162
    ] ensure:[aStream close].
2dcce6385978 initial checkin
james
parents:
diff changeset
   163
2dcce6385978 initial checkin
james
parents:
diff changeset
   164
    self filename:filename.
2dcce6385978 initial checkin
james
parents:
diff changeset
   165
    aPackageManager addPackage:aPackage.
2dcce6385978 initial checkin
james
parents:
diff changeset
   166
    self package:aPackage.
2dcce6385978 initial checkin
james
parents:
diff changeset
   167
    aPackage packageHandler:self.
2dcce6385978 initial checkin
james
parents:
diff changeset
   168
    aPackage initializeLoaded.
2dcce6385978 initial checkin
james
parents:
diff changeset
   169
    ^ aPackage
2dcce6385978 initial checkin
james
parents:
diff changeset
   170
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   171
2dcce6385978 initial checkin
james
parents:
diff changeset
   172
!StxPackageFileReader::Version1 methodsFor:'checks'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   173
2dcce6385978 initial checkin
james
parents:
diff changeset
   174
canReadFilename:aFilename
2dcce6385978 initial checkin
james
parents:
diff changeset
   175
2dcce6385978 initial checkin
james
parents:
diff changeset
   176
    aFilename isFilename ifFalse:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   177
        ^ self error:aFilename printString, ' is not a filename so cannot be written to.'.
2dcce6385978 initial checkin
james
parents:
diff changeset
   178
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   179
2dcce6385978 initial checkin
james
parents:
diff changeset
   180
    aFilename directory exists ifFalse:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   181
        ^ self error:aFilename directory printString, ' directory does not exist.'.
2dcce6385978 initial checkin
james
parents:
diff changeset
   182
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   183
2dcce6385978 initial checkin
james
parents:
diff changeset
   184
    aFilename exists ifFalse:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   185
        ^ self error:aFilename printString, ' file does not exist'.
2dcce6385978 initial checkin
james
parents:
diff changeset
   186
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   187
2dcce6385978 initial checkin
james
parents:
diff changeset
   188
    (aFilename isDirectory not) ifFalse:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   189
        ^ self error:aFilename printString, ' is a directory and cannot be read'.
2dcce6385978 initial checkin
james
parents:
diff changeset
   190
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   191
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   192
2dcce6385978 initial checkin
james
parents:
diff changeset
   193
checkOkToInstall:aPackage
2dcce6385978 initial checkin
james
parents:
diff changeset
   194
    "check that aPackage is ok to install. Look for incompatibilities"
2dcce6385978 initial checkin
james
parents:
diff changeset
   195
2dcce6385978 initial checkin
james
parents:
diff changeset
   196
    self canReadFilename:filename
2dcce6385978 initial checkin
james
parents:
diff changeset
   197
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   198
2dcce6385978 initial checkin
james
parents:
diff changeset
   199
!StxPackageFileReader::Version1 methodsFor:'helpers'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   200
2dcce6385978 initial checkin
james
parents:
diff changeset
   201
applyChange:aChange fromPackage:aPackage 
2dcce6385978 initial checkin
james
parents:
diff changeset
   202
    "apply change and make sure created objects are associated
2dcce6385978 initial checkin
james
parents:
diff changeset
   203
    with package"
2dcce6385978 initial checkin
james
parents:
diff changeset
   204
2dcce6385978 initial checkin
james
parents:
diff changeset
   205
    | aMethod |
2dcce6385978 initial checkin
james
parents:
diff changeset
   206
    aChange isMethodChange ifTrue:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   207
        aChange apply.
2dcce6385978 initial checkin
james
parents:
diff changeset
   208
"/        aMethod := ChangesHelper getCurrentMethodFromMethodChange:aChange.
2dcce6385978 initial checkin
james
parents:
diff changeset
   209
        aMethod := aChange changeMethod.
2dcce6385978 initial checkin
james
parents:
diff changeset
   210
        aMethod ifNil:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   211
            self error:'Error during fileIn'.
2dcce6385978 initial checkin
james
parents:
diff changeset
   212
            ^ self.
2dcce6385978 initial checkin
james
parents:
diff changeset
   213
        ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   214
2dcce6385978 initial checkin
james
parents:
diff changeset
   215
        aMethod setPackage:aPackage name.
2dcce6385978 initial checkin
james
parents:
diff changeset
   216
        ^ self
2dcce6385978 initial checkin
james
parents:
diff changeset
   217
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   218
2dcce6385978 initial checkin
james
parents:
diff changeset
   219
    aChange apply
2dcce6385978 initial checkin
james
parents:
diff changeset
   220
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   221
2dcce6385978 initial checkin
james
parents:
diff changeset
   222
createPackagePath                                                    
2dcce6385978 initial checkin
james
parents:
diff changeset
   223
    " create the path name for the filename if it does not already exist"
2dcce6385978 initial checkin
james
parents:
diff changeset
   224
    ^ self createPathFor:package filename
2dcce6385978 initial checkin
james
parents:
diff changeset
   225
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   226
2dcce6385978 initial checkin
james
parents:
diff changeset
   227
createPathFor:aFilename
2dcce6385978 initial checkin
james
parents:
diff changeset
   228
    " create the path name for the filename if it does not already exist"
2dcce6385978 initial checkin
james
parents:
diff changeset
   229
    ^ aFilename directory makeDirectory.
2dcce6385978 initial checkin
james
parents:
diff changeset
   230
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   231
2dcce6385978 initial checkin
james
parents:
diff changeset
   232
openReadStreamStreamOn:aFilename andDo:aOneArgBlockWithAnExpectedStream
2dcce6385978 initial checkin
james
parents:
diff changeset
   233
    | aStream |
2dcce6385978 initial checkin
james
parents:
diff changeset
   234
    [
2dcce6385978 initial checkin
james
parents:
diff changeset
   235
        aStream := aFilename readStream.
2dcce6385978 initial checkin
james
parents:
diff changeset
   236
        aOneArgBlockWithAnExpectedStream value:aStream
2dcce6385978 initial checkin
james
parents:
diff changeset
   237
    ] ensure:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   238
        aStream close
2dcce6385978 initial checkin
james
parents:
diff changeset
   239
    ]
2dcce6385978 initial checkin
james
parents:
diff changeset
   240
2dcce6385978 initial checkin
james
parents:
diff changeset
   241
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   242
2dcce6385978 initial checkin
james
parents:
diff changeset
   243
!StxPackageFileReader::Version1 methodsFor:'installation / uninstallation'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   244
2dcce6385978 initial checkin
james
parents:
diff changeset
   245
basicInstallPackage:aPackage fromStream:aStream in:aPackageManager
2dcce6385978 initial checkin
james
parents:
diff changeset
   246
    "install a package"
2dcce6385978 initial checkin
james
parents:
diff changeset
   247
    | changeSet |
2dcce6385978 initial checkin
james
parents:
diff changeset
   248
    aPackage prerequisites evaluate.
2dcce6385978 initial checkin
james
parents:
diff changeset
   249
    aPackage preInstallScript evaluate.
2dcce6385978 initial checkin
james
parents:
diff changeset
   250
2dcce6385978 initial checkin
james
parents:
diff changeset
   251
    changeSet := ChangeSet fromStream:aStream.  
2dcce6385978 initial checkin
james
parents:
diff changeset
   252
    changeSet do:[:aChange |
2dcce6385978 initial checkin
james
parents:
diff changeset
   253
        self applyChange:aChange fromPackage:aPackage.
2dcce6385978 initial checkin
james
parents:
diff changeset
   254
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   255
    self validateInstallation. "/ may produce errors
2dcce6385978 initial checkin
james
parents:
diff changeset
   256
    aPackage initializeInstalled.
2dcce6385978 initial checkin
james
parents:
diff changeset
   257
2dcce6385978 initial checkin
james
parents:
diff changeset
   258
"/    aPackage isInstalled:true. 
2dcce6385978 initial checkin
james
parents:
diff changeset
   259
    aPackage postInstallScript evaluate.
2dcce6385978 initial checkin
james
parents:
diff changeset
   260
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   261
2dcce6385978 initial checkin
james
parents:
diff changeset
   262
basicInstallPackage:aPackage in:aPackageManager
2dcce6385978 initial checkin
james
parents:
diff changeset
   263
    "install a package"
2dcce6385978 initial checkin
james
parents:
diff changeset
   264
    
2dcce6385978 initial checkin
james
parents:
diff changeset
   265
    self openReadStreamStreamOn:aPackage filename andDo:[:aStream |
2dcce6385978 initial checkin
james
parents:
diff changeset
   266
        self skipPackageHeaderFrom:aStream.
2dcce6385978 initial checkin
james
parents:
diff changeset
   267
"/        aStream nextChunk       
2dcce6385978 initial checkin
james
parents:
diff changeset
   268
        self basicInstallPackage:aPackage fromStream:aStream  in:aPackageManager
2dcce6385978 initial checkin
james
parents:
diff changeset
   269
    ].
2dcce6385978 initial checkin
james
parents:
diff changeset
   270
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   271
2dcce6385978 initial checkin
james
parents:
diff changeset
   272
skipPackageHeaderFrom:aReadStream 
2dcce6385978 initial checkin
james
parents:
diff changeset
   273
    aReadStream nextChunk. "/ nothing
2dcce6385978 initial checkin
james
parents:
diff changeset
   274
    aReadStream nextChunk. "/ script for creating the receiver
2dcce6385978 initial checkin
james
parents:
diff changeset
   275
    aReadStream nextChunk. "/ the package header
2dcce6385978 initial checkin
james
parents:
diff changeset
   276
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   277
2dcce6385978 initial checkin
james
parents:
diff changeset
   278
!StxPackageFileReader::Version1 methodsFor:'loading'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   279
2dcce6385978 initial checkin
james
parents:
diff changeset
   280
loadFromStream:aStream 
2dcce6385978 initial checkin
james
parents:
diff changeset
   281
    aStream nextChunk.
2dcce6385978 initial checkin
james
parents:
diff changeset
   282
    aStream nextChunk.    "/ anEmpty string
2dcce6385978 initial checkin
james
parents:
diff changeset
   283
    package := self getInitialPackageFromChunk:aStream nextChunk.    "/ the receiver representation
2dcce6385978 initial checkin
james
parents:
diff changeset
   284
    package filename:filename.
2dcce6385978 initial checkin
james
parents:
diff changeset
   285
    ^ package
2dcce6385978 initial checkin
james
parents:
diff changeset
   286
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   287
2dcce6385978 initial checkin
james
parents:
diff changeset
   288
!StxPackageFileReader::Version1 methodsFor:'stream messages'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   289
2dcce6385978 initial checkin
james
parents:
diff changeset
   290
getChangeSetFrom:aStream 
2dcce6385978 initial checkin
james
parents:
diff changeset
   291
    ^ ChangeSet fromStream:aStream
2dcce6385978 initial checkin
james
parents:
diff changeset
   292
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   293
2dcce6385978 initial checkin
james
parents:
diff changeset
   294
getInitialPackageFrom:aStream 
2dcce6385978 initial checkin
james
parents:
diff changeset
   295
    |nextChunk|
2dcce6385978 initial checkin
james
parents:
diff changeset
   296
2dcce6385978 initial checkin
james
parents:
diff changeset
   297
    nextChunk := aStream nextChunk.
2dcce6385978 initial checkin
james
parents:
diff changeset
   298
    Class nameSpaceQuerySignal 
2dcce6385978 initial checkin
james
parents:
diff changeset
   299
            answer:Packages
2dcce6385978 initial checkin
james
parents:
diff changeset
   300
            do:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   301
        ^ (Compiler evaluate:nextChunk)
2dcce6385978 initial checkin
james
parents:
diff changeset
   302
    ]
2dcce6385978 initial checkin
james
parents:
diff changeset
   303
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   304
2dcce6385978 initial checkin
james
parents:
diff changeset
   305
getInitialPackageFromChangeSet:aChangeSet 
2dcce6385978 initial checkin
james
parents:
diff changeset
   306
    |nextChunk|
2dcce6385978 initial checkin
james
parents:
diff changeset
   307
2dcce6385978 initial checkin
james
parents:
diff changeset
   308
    nextChunk := aChangeSet first source.
2dcce6385978 initial checkin
james
parents:
diff changeset
   309
    Class nameSpaceQuerySignal 
2dcce6385978 initial checkin
james
parents:
diff changeset
   310
            answer:Packages
2dcce6385978 initial checkin
james
parents:
diff changeset
   311
            do:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   312
        ^ (Compiler evaluate:nextChunk)
2dcce6385978 initial checkin
james
parents:
diff changeset
   313
    ]
2dcce6385978 initial checkin
james
parents:
diff changeset
   314
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   315
2dcce6385978 initial checkin
james
parents:
diff changeset
   316
getInitialPackageFromChunk:aChunk 
2dcce6385978 initial checkin
james
parents:
diff changeset
   317
2dcce6385978 initial checkin
james
parents:
diff changeset
   318
    Class nameSpaceQuerySignal 
2dcce6385978 initial checkin
james
parents:
diff changeset
   319
            answer:Packages
2dcce6385978 initial checkin
james
parents:
diff changeset
   320
            do:[
2dcce6385978 initial checkin
james
parents:
diff changeset
   321
        ^ (Compiler evaluate:aChunk)
2dcce6385978 initial checkin
james
parents:
diff changeset
   322
    ]
2dcce6385978 initial checkin
james
parents:
diff changeset
   323
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   324
2dcce6385978 initial checkin
james
parents:
diff changeset
   325
!StxPackageFileReader::Version1 methodsFor:'validation'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   326
2dcce6385978 initial checkin
james
parents:
diff changeset
   327
validateAllClassesAreInImage
2dcce6385978 initial checkin
james
parents:
diff changeset
   328
2dcce6385978 initial checkin
james
parents:
diff changeset
   329
    #toDo
2dcce6385978 initial checkin
james
parents:
diff changeset
   330
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   331
2dcce6385978 initial checkin
james
parents:
diff changeset
   332
validateAllMethodsAreInImage
2dcce6385978 initial checkin
james
parents:
diff changeset
   333
    #toDo
2dcce6385978 initial checkin
james
parents:
diff changeset
   334
!
2dcce6385978 initial checkin
james
parents:
diff changeset
   335
2dcce6385978 initial checkin
james
parents:
diff changeset
   336
validateInstallation
2dcce6385978 initial checkin
james
parents:
diff changeset
   337
    self validateAllClassesAreInImage.
2dcce6385978 initial checkin
james
parents:
diff changeset
   338
    self validateAllMethodsAreInImage.
2dcce6385978 initial checkin
james
parents:
diff changeset
   339
! !
2dcce6385978 initial checkin
james
parents:
diff changeset
   340
2dcce6385978 initial checkin
james
parents:
diff changeset
   341
!StxPackageFileReader class methodsFor:'documentation'!
2dcce6385978 initial checkin
james
parents:
diff changeset
   342
2dcce6385978 initial checkin
james
parents:
diff changeset
   343
version
1445
b8cc2792ab97 copyright
Claus Gittinger <cg@exept.de>
parents: 1230
diff changeset
   344
    ^ '$Header: /cvs/stx/stx/libbasic3/packages/StxPackageFileReader.st,v 1.2 2006-01-10 09:32:03 cg Exp $'
1230
2dcce6385978 initial checkin
james
parents:
diff changeset
   345
! !