No I will have a look :) But I also need latestVersion because you need the two: to always load the latest and save latest + 1 Stef
On Fri, Aug 18, 2017 at 11:38 PM, Denis Kudriashov <[email protected]> wrote: > Do you know that there is #nextVersion method in FileReference? > > 2017-08-18 22:04 GMT+02:00 Stephane Ducasse <[email protected]>: >> >> Hi >> >> I really like (when I save little data files) to have a simple versioning. >> For example for my game collection I have >> Games.1.ston >> Games.2.ston >> ... >> and I like that this is managed for me by the system. >> >> I harvested this functionality from squeak long time ago. >> I rewrote it fast and dirty in Pharo. I find this two methods super >> handy and they provide cheap versioning for little files. >> >> >> >> lastNameFor: baseFileName extension: extension >> "Assumes a file name includes a version number encoded as '.' >> followed by digits >> preceding the file extension, e.g., games.22.ston >> Answer the file name with the largest number. >> If a version number is not found, raises an error" >> >> "FileSystem workingDirectory lastNameFor: 'games' extension: 'ston'" >> >> | files | >> files := self childrenMatching: baseFileName , '.*.' , extension. >> files ifEmpty: [ ^ self error: 'No file with number pattern' ]. >> ^ (files asSortedCollection: [ :a :b | a basename < b basename ]) last >> >> nextNameFor: baseFileName extension: extension >> "Assumes a file name includes a version number encoded as '.' >> followed by digits >> preceding the file extension, e.g., games.22.ston >> Increment the version number (of the largest one) and answer the >> new file name, e.g., games23.ston >> If a version number is not found, set the version to 1 and answer a >> new file name" >> >> "FileSystem workingDirectory nextNameFor: 'games' extension: 'ston'" >> >> | files splits version | >> files := self childrenMatching: baseFileName , '.*.' , extension. >> files ifEmpty: [ ^ baseFileName , '.1.' , extension ]. >> splits := files >> collect: [ :filename | filename basename splitOn: $. ] >> thenSelect: [ :split | (split at: 1) = baseFileName and: [ >> split size = 3 ] ]. >> splits := splits asSortedCollection: [ :a :b | (a at: 2) < (b at: 2) >> ]. >> version := splits isEmpty >> ifTrue: [ 1 ] >> ifFalse: [ (splits last at: 2) asNumber + 1 ]. >> ^ baseFileName , '.' , version asString , '.' , extension >> >> I think that these to methods can be a valuable addition to >> fileReference (the methods can be better implemented). >> >> Let me know what you think. >> >> https://pharo.fogbugz.com/f/cases/20324/Handy-file-automatic-numbering >> >> Stef >> >
