MCMczReader.st
author Claus Gittinger <cg@exept.de>
Wed, 22 Nov 2006 14:05:02 +0100
changeset 32 1bd0dbe2a6c7
child 141 0f1d8459da84
permissions -rw-r--r--
initial checkin
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
MCVersionReader subclass:#MCMczReader
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'zip infoCache'
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
	category:'Monticello-Storing'
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
!MCMczReader class methodsFor:'accessing'!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
extension
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
	^ 'mcz'
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
! !
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
!MCMczReader class methodsFor:'testing'!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
supportsDependencies
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	^ true
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
supportsVersions
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
	^ true
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
! !
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
!MCMczReader methodsFor:'*monticello'!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
associate: tokens
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
        | result |
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
        result _ Dictionary new.
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
        tokens pairsDo: [:key :valueArg | |value|
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
                                        value := valueArg.        
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
                                        value isString ifFalse: [value _ value collect: [:ea | self associate: ea]].
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
                                        result at: key put: value].
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
        ^ result
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
    "Created: / 16-11-2006 / 16:39:45 / cg"
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
! !
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
!MCMczReader methodsFor:'as yet unclassified'!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
extractDefinitionsFrom: member
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
	| reader |
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
	(MCSnapshotReader readerClassForFileNamed: member fileName)
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
		ifNotNilDo: [:rc | reader _ rc on: member contentStream text.
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
					definitions addAll: reader definitions]
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
extractDependencyFrom: zipMember
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
	^ MCVersionDependency
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
		package: (MCPackage named: (zipMember fileName copyAfterLast: $/))
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
		info: (self extractInfoFrom: (self parseMember: zipMember fileName))
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
extractInfoFrom: dict
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
	^ self infoCache at: (dict at: #id) ifAbsentPut:
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
		[MCVersionInfo
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
			name: (dict at: #name ifAbsent: [''])
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
			id: (UUID fromString: (dict at: #id))
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
			message: (dict at: #message ifAbsent: [''])
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
			date: ([Date fromString: (dict at: #date) ] on: Error do: [ :ex | ex return: nil ])
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
			time: ([ Time fromString:(dict at: #time)] on: Error do: [ :ex | ex return: nil ])
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
			author: (dict at: #author ifAbsent: [''])
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
			ancestors: ((dict at: #ancestors) collect: [:ea | self extractInfoFrom: ea])
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
			stepChildren: ((dict at: #stepChildren ifAbsent: [#()]) collect: [:ea | self extractInfoFrom: ea])]
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
infoCache
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
	^ infoCache ifNil: [infoCache _ Dictionary new]
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
loadDefinitions
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
	definitions _ OrderedCollection new.
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
	(self zip memberNamed: 'snapshot.bin') ifNotNilDo:
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
		[:m | [^ definitions _ (DataStream on: m contentStream) next definitions]
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
			on: Error do: [:fallThrough ]].
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
	"otherwise"
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
	(self zip membersMatching: 'snapshot/*')
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
		do: [:m | self extractDefinitionsFrom: m].
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
loadDependencies
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
	dependencies _ (self zip membersMatching: 'dependencies/*') collect: [:m | self extractDependencyFrom: m].
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
	dependencies _ dependencies asArray.
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
loadPackage
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
	| dict |
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
	dict _ self parseMember: 'package'.
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
	package _ MCPackage named: (dict at: #name)
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
loadVersionInfo
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
	info _ self extractInfoFrom: (self parseMember: 'version')
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
parseMember: fileName
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
	| tokens |
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
	tokens _ (self scanner scanTokens: (self zip contentsOf: fileName)) first.
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
	^ self associate: tokens
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
scanner
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
	^ MCScanner
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
zip
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
	zip ifNil:
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
		[zip _ ZipArchive new.
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
		zip readFrom: stream].
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
	^ zip
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
! !
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
!MCMczReader class methodsFor:'documentation'!
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
version
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCMczReader.st,v 1.1 2006-11-22 13:05:02 cg Exp $'
1bd0dbe2a6c7 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
! !