MCCacheRepository.st
author Jan Vrany <jan.vrany@labware.com>
Tue, 11 Jul 2023 12:13:27 +0100
branchjv
changeset 1173 e3dd2050492e
parent 1133 c2a73e27e67c
permissions -rw-r--r--
Update class category to match package name if it does not This is needed because in Squeak / Pharo world package membership is defined by (class) category prefix. This is soo annoying...

"
COPYRIGHT (c) 2020 LabWare
"
"{ Package: 'stx:goodies/monticello' }"

"{ NameSpace: Smalltalk }"

MCDirectoryRepository subclass:#MCCacheRepository
	instanceVariableNames:'packageCaches seenFiles'
	classVariableNames:''
	poolDictionaries:''
	category:'SCM-Monticello-Repositories'
!

MCCacheRepository class instanceVariableNames:'default'

"
 No other class instance variables are inherited by this class.
"
!

!MCCacheRepository class methodsFor:'documentation'!

copyright
"
COPYRIGHT (c) 2020 LabWare


"
! !

!MCCacheRepository class methodsFor:'initialization'!

initialize
	self checkCacheDirectory
! !

!MCCacheRepository class methodsFor:'instance creation'!

default
	self checkCacheDirectory.
	^ default ifNil: [default _ self new directory: self cacheDirectory]
! !

!MCCacheRepository class methodsFor:'misc'!

cacheDirectory
    ^ (Filename currentDirectory / 'package-cache')
        makeDirectory;
        yourself.

    "Modified: / 25-08-2020 / 10:09:53 / Jan Vrany <jan.vrany@labware.com>"
!

checkCacheDirectory
	default notNil and: [default directory exists ifFalse: [default _ nil]]
! !

!MCCacheRepository class methodsFor:'queries'!

description
	^ nil
! !

!MCCacheRepository methodsFor:'accessing'!

seenFileNames
	^ seenFiles ifNil: [seenFiles _ OrderedCollection new]
! !

!MCCacheRepository methodsFor:'as yet unclassified'!

cacheForPackage: aPackage
	packageCaches ifNil: [packageCaches _ Dictionary new].
	^ packageCaches at: aPackage ifAbsentPut: [MCPackageCache new]
!

newFileNames 
	^ self allFileNames difference: self seenFileNames
!

packageForFileNamed: aString
	^ self packageCache at: aString ifAbsentPut: [self versionReaderForFileNamed: aString do: [:r | r package]]
!

rescan
	self newFileNames do:
		[:ea |
		self versionReaderForFileNamed: ea do:
			[:reader |
			(self cacheForPackage: reader package)
				recordVersionInfo: reader info
				forFileNamed: ea.
			self seenFileNames add: ea]]
		displayingProgress: 'Scanning cache...'
!

writeStreamForFileNamed: aString do: aBlock
    ^ self writeStreamForFileNamed: aString replace: true do: aBlock

    "Created: / 08-09-2020 / 12:28:38 / Jan Vrany <jan.vrany@labware.com>"
! !

!MCCacheRepository methodsFor:'printing & storing'!

basicStoreVersion: aVersion
	(aVersion isCacheable and: [self allFileNames includes: aVersion fileName])
		ifFalse: [super basicStoreVersion: aVersion]
! !

!MCCacheRepository methodsFor:'queries'!

versionInfoForFileNamed: aString
	^ self infoCache at: aString ifAbsentPut: [self versionReaderForFileNamed: aString do: [:r | r info]]
! !

!MCCacheRepository class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCCacheRepository.st,v 1.3 2014-02-12 14:53:37 cg Exp $'
!

version_HG

    ^ '$Changeset: <not expanded> $'
! !


MCCacheRepository initialize!