We got some problems with the cache logic recently. To the point we would like to add a UUID to the file name. It needs a real look. Stef
* I'm don't think it's used, but this might be a candidate: cacheAllFileNamesDuring: aBlock cacheFileNames == true ifTrue: [ ^ aBlock value ]. allFileNames := nil. cacheFileNames := true. <-- If this is a suspension point, if terminated, the file names would be static from the next call to allFileNames until the next time cacheAllFiles... is used --> ^ aBlock ensure: [ allFileNames := nil. cacheFileNames := false]
If the need is guarding against arbitrary termination, not just errors in the block itself, I think it would have to be:
^[allFileNames := nil. cacheFileNames := true. aBlock value ] ensure: [allFileNames := nil. cacheFileNames := false]
Of the actually called methods from includesVersionNamed:, I stopped checking after stumbling into, and spending too much time wondering why the code did what it did:
MCFileBasedRepository >> #readableFileNames | all cached new emptyFilenamelength | "<hyphenated-package-name>.<dotted.branch.tag>-<initials>.<count>.mcz" emptyFilenamelength := 'P-i.c.mcz' size. all := self allFileNames."from repository" all := all reject: [ :each | each size < emptyFilenamelength]. "first stupid way to filter first level broken files. Ideally we should remove any files not following the naming pattern: PackageName-author.number[(branch)].mcz" cached := self cachedFileNames."in memory" new := all difference: cached. ^ (cached asArray, new) select: [:ea | self canReadFileNamed: ea]
Removing cached entries from all entries, then iterating on the remaining + cached? That's an aweful lot of nonsense for the clearly essential capability to say you are able to read files that have recently been deleted from the file system...