--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MCMczReader.st Wed Nov 22 14:05:02 2006 +0100
@@ -0,0 +1,119 @@
+"{ Package: 'stx:goodies/monticello' }"
+
+MCVersionReader subclass:#MCMczReader
+ instanceVariableNames:'zip infoCache'
+ classVariableNames:''
+ poolDictionaries:''
+ category:'Monticello-Storing'
+!
+
+
+!MCMczReader class methodsFor:'accessing'!
+
+extension
+ ^ 'mcz'
+! !
+
+!MCMczReader class methodsFor:'testing'!
+
+supportsDependencies
+ ^ true
+!
+
+supportsVersions
+ ^ true
+! !
+
+!MCMczReader methodsFor:'*monticello'!
+
+associate: tokens
+ | result |
+ result _ Dictionary new.
+ tokens pairsDo: [:key :valueArg | |value|
+ value := valueArg.
+ value isString ifFalse: [value _ value collect: [:ea | self associate: ea]].
+ result at: key put: value].
+ ^ result
+
+ "Created: / 16-11-2006 / 16:39:45 / cg"
+! !
+
+!MCMczReader methodsFor:'as yet unclassified'!
+
+extractDefinitionsFrom: member
+ | reader |
+ (MCSnapshotReader readerClassForFileNamed: member fileName)
+ ifNotNilDo: [:rc | reader _ rc on: member contentStream text.
+ definitions addAll: reader definitions]
+!
+
+extractDependencyFrom: zipMember
+ ^ MCVersionDependency
+ package: (MCPackage named: (zipMember fileName copyAfterLast: $/))
+ info: (self extractInfoFrom: (self parseMember: zipMember fileName))
+!
+
+extractInfoFrom: dict
+ ^ self infoCache at: (dict at: #id) ifAbsentPut:
+ [MCVersionInfo
+ name: (dict at: #name ifAbsent: [''])
+ id: (UUID fromString: (dict at: #id))
+ message: (dict at: #message ifAbsent: [''])
+ date: ([Date fromString: (dict at: #date) ] on: Error do: [ :ex | ex return: nil ])
+ time: ([ Time fromString:(dict at: #time)] on: Error do: [ :ex | ex return: nil ])
+ author: (dict at: #author ifAbsent: [''])
+ ancestors: ((dict at: #ancestors) collect: [:ea | self extractInfoFrom: ea])
+ stepChildren: ((dict at: #stepChildren ifAbsent: [#()]) collect: [:ea | self extractInfoFrom: ea])]
+!
+
+infoCache
+ ^ infoCache ifNil: [infoCache _ Dictionary new]
+!
+
+loadDefinitions
+ definitions _ OrderedCollection new.
+ (self zip memberNamed: 'snapshot.bin') ifNotNilDo:
+ [:m | [^ definitions _ (DataStream on: m contentStream) next definitions]
+ on: Error do: [:fallThrough ]].
+ "otherwise"
+ (self zip membersMatching: 'snapshot/*')
+ do: [:m | self extractDefinitionsFrom: m].
+!
+
+loadDependencies
+ dependencies _ (self zip membersMatching: 'dependencies/*') collect: [:m | self extractDependencyFrom: m].
+ dependencies _ dependencies asArray.
+!
+
+loadPackage
+ | dict |
+ dict _ self parseMember: 'package'.
+ package _ MCPackage named: (dict at: #name)
+!
+
+loadVersionInfo
+ info _ self extractInfoFrom: (self parseMember: 'version')
+!
+
+parseMember: fileName
+ | tokens |
+ tokens _ (self scanner scanTokens: (self zip contentsOf: fileName)) first.
+ ^ self associate: tokens
+!
+
+scanner
+ ^ MCScanner
+!
+
+zip
+ zip ifNil:
+ [zip _ ZipArchive new.
+ zip readFrom: stream].
+ ^ zip
+! !
+
+!MCMczReader class methodsFor:'documentation'!
+
+version
+ ^ '$Header: /cvs/stx/stx/goodies/monticello/MCMczReader.st,v 1.1 2006-11-22 13:05:02 cg Exp $'
+! !