MCVersionReader.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 706 fa1484ed71e3
child 1095 87f223484bc3
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:

"{ Package: 'stx:goodies/monticello' }"

MCReader subclass:#MCVersionReader
	instanceVariableNames:'package info definitions dependencies stepChildren'
	classVariableNames:''
	poolDictionaries:''
	category:'SCM-Monticello-Storing'
!


!MCVersionReader class methodsFor:'*monticello-file services'!

loadVersionStream: stream fromDirectory: directory
	| version |
	version := self versionFromStream: stream.
	directory isRemoteDirectory ifFalse: [
	version workingCopy repositoryGroup addRepository:
		(MCDirectoryRepository new directory: directory). ].
	version load.

!

mergeVersionStream: stream
	(self versionFromStream: stream) merge
!

openVersionFromStream: stream
	(self versionFromStream: stream) open
! !

!MCVersionReader class methodsFor:'*monticello-file services-override-override'!

serviceLoadVersion
	^ (SimpleServiceEntry
		provider: self
		label: 'load version'
		selector: #loadVersionStream:fromDirectory:
		description: 'load a package version'
		buttonLabel: 'load')
		argumentGetter: [ :fileList | { fileList readOnlyStream . fileList directory } ]
!

serviceMergeVersion
	^ (SimpleServiceEntry
		provider: self
		label: 'merge version'
		selector: #mergeVersionStream:
		description: 'merge a package version into the image'
		buttonLabel: 'merge')
		argumentGetter: [ :fileList | fileList readOnlyStream ]
!

serviceOpenVersion
	^ (SimpleServiceEntry
		provider: self
		label: 'open version'
		selector: #openVersionFromStream:
		description: 'open a package version'
		buttonLabel: 'open')
		argumentGetter: [ :fileList | fileList readOnlyStream ]
! !

!MCVersionReader class methodsFor:'file services'!

fileReaderServicesForFile: fullName suffix: suffix
	self isAbstract ifTrue: [^ #()].
	^ ((suffix = self extension) or: [ suffix = '*' ])
		ifTrue: [self services]
		ifFalse: [Array new: 0]
		
!

initialize
        "MCVersionReader initialize"
        "
        Smalltalk 
                at: #MczInstaller
                ifPresent: [:installer | FileList unregisterFileReader: installer].
        self concreteSubclasses do: [:aClass | FileList registerFileReader: aClass].
        "
        "get rid of AnObsoleteMCMcReader and AnObsoleteMCMcvReader"
        "(FileList registeredFileReaderClasses  select: [ :ea | ea isObsolete ]) do: 
                [ :ea | FileList unregisterFileReader: ea ]
        "

    "Modified: / 20-10-2010 / 12:02:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
!

loadVersionFile: fileName
	| version |
	version := self versionFromFile: fileName.
	version workingCopy repositoryGroup addRepository:
		(MCDirectoryRepository new directory:
			(FileDirectory on: (FileDirectory dirPathFor: fileName))).
	version load.

!

mergeVersionFile: fileName
	(self versionFromFile: fileName) merge
!

openVersionFile: fileName
	(self versionFromFile: fileName) open
!

services
	^ Array 
		with: self serviceLoadVersion
		with: self serviceMergeVersion
		with: self serviceOpenVersion
!

unload
	FileList unregisterFileReader: self 
! !

!MCVersionReader class methodsFor:'reading'!

file: fileName streamDo: aBlock
	| file |
	^ 	[file := FileStream readOnlyFileNamed: fileName.
		aBlock value: file]
			ensure: [file close]
!

on: s fileName: f
	^ self on: s
!

versionFromFile: fileName
	^ self file: fileName streamDo: [:stream | self versionFromStream: stream]
!

versionFromStream: aStream
	^ (self on: aStream) version
!

versionInfoFromStream: aStream
	^ (self on: aStream) info
! !

!MCVersionReader methodsFor:'accessing'!

basicVersion
	^ MCVersion
		package: self package
		info: self info
		snapshot: self snapshot
		dependencies: self dependencies
!

definitions
	definitions ifNil: [self loadDefinitions].
	^ definitions
!

dependencies
	dependencies ifNil: [self loadDependencies].
	^ dependencies
!

info
	info ifNil: [self loadVersionInfo].
	^ info
!

package
	package ifNil: [self loadPackage].
	^ package
!

snapshot
	^ MCSnapshot fromDefinitions: self definitions
!

version
	^ self basicVersion
! !

!MCVersionReader methodsFor:'loading'!

loadDefinitions
	self subclassResponsibility 
!

loadDependencies
	self subclassResponsibility 
!

loadPackage
	self subclassResponsibility 
!

loadVersionInfo
	self subclassResponsibility
! !

!MCVersionReader class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCVersionReader.st,v 1.5 2012-09-11 21:31:02 cg Exp $'
!

version_CVS
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCVersionReader.st,v 1.5 2012-09-11 21:31:02 cg Exp $'
!

version_SVN
    ^ '§Id: MCVersionReader.st 21 2010-10-20 10:02:41Z vranyj1 §'
! !

MCVersionReader initialize!