"{ Package: 'stx:goodies/monticello' }"
MCWriter subclass:#MCMczWriter
instanceVariableNames:'zip infoWriter'
classVariableNames:''
poolDictionaries:''
category:'Monticello-Storing'
!
!MCMczWriter class methodsFor:'as yet unclassified'!
fileOut: aVersion on: aStream
| inst |
inst _ self on: aStream.
inst writeVersion: aVersion.
inst flush.
!
new
^ self basicNew initialize
!
readerClass
^ MCMczReader
! !
!MCMczWriter methodsFor:'accessing'!
format
^ '1'
!
snapshotWriterClass
^ MCStWriter
!
zip
^ zip
! !
!MCMczWriter methodsFor:'initializing'!
initialize
zip _ ZipArchive new.
! !
!MCMczWriter methodsFor:'serializing'!
serializeDefinitions: aCollection
| writer s |
Smalltalk isSmalltalkX ifTrue:[
s _ WriteStream on: String new.
] ifFalse:[
s _ RWBinaryOrTextStream on: String new.
].
writer _ self snapshotWriterClass on: s.
writer writeDefinitions: aCollection.
^ s contents
!
serializeInBinary: aSnapshot
| writer s |
Smalltalk isSmalltalkX ifTrue:[
^ aSnapshot binaryStoreBytes
].
s _ RWBinaryOrTextStream on: String new.
writer _ DataStream on: s.
writer nextPut: aSnapshot.
^ s contents
!
serializePackage: aPackage
^ '(name ''', aPackage name, ''')'
!
serializeVersionInfo: aVersionInfo
infoWriter ifNil: [infoWriter _ MCVersionInfoWriter new].
^ String streamContents:
[:s |
infoWriter stream: s.
infoWriter writeVersionInfo: aVersionInfo]
! !
!MCMczWriter methodsFor:'visiting'!
writeDefinitions: aVersion
self writeSnapshot: aVersion snapshot
!
writeFormat
" self addString: self format at: 'format'."
!
writePackage: aPackage
self addString: (self serializePackage: aPackage) at: 'package'
!
writeSnapshot: aSnapshot
self addString: (self serializeDefinitions: aSnapshot definitions) at: 'snapshot/source.', self snapshotWriterClass extension.
self addString: (self serializeInBinary: aSnapshot) at: 'snapshot.bin'
!
writeVersion: aVersion
self writeFormat.
self writePackage: aVersion package.
self writeVersionInfo: aVersion info.
self writeDefinitions: aVersion.
aVersion dependencies do: [:ea | self writeVersionDependency: ea]
!
writeVersionDependency: aVersionDependency
| string |
string _ (self serializeVersionInfo: aVersionDependency versionInfo).
self addString: string at: 'dependencies/', aVersionDependency package name
!
writeVersionInfo: aVersionInfo
| string |
string _ self serializeVersionInfo: aVersionInfo.
self addString: string at: 'version'.
! !
!MCMczWriter methodsFor:'writing'!
addString: string at: path
| member |
Smalltalk isSmalltalkX ifTrue:[
zip addFile:path fromStream:(string readStream) compressMethod:(ZipArchive compressionDeflated)
] ifFalse:[
member _ zip addString: string as: path.
member desiredCompressionMethod: ZipArchive compressionDeflated
]
!
flush
Smalltalk isSmalltalkX ifTrue:[
zip close.
stream close.
^ self.
].
zip writeTo: stream.
stream close
! !
!MCMczWriter class methodsFor:'documentation'!
version
^ '$Header: /cvs/stx/stx/goodies/monticello/MCMczWriter.st,v 1.2 2009-10-26 15:25:10 cg Exp $'
!
version_CVS
^ '$Header: /cvs/stx/stx/goodies/monticello/MCMczWriter.st,v 1.2 2009-10-26 15:25:10 cg Exp $'
! !