[Vm-dev] [Pharo-dev] FileSystem file attributes and #isSymlink patch

Alistair Grant akgrant0710 at gmail.com
Tue Jul 25 15:21:16 UTC 2017


Hi David,

Thanks very much for your follow-up.

On Mon, Jul 24, 2017 at 07:28:07PM -0400, David T. Lewis wrote:
>  
> Hi Alistair,
> 
> I am copying this to vm-dev for follow up on the plugin, see below.
> 
> 
> On Mon, Jul 24, 2017 at 08:09:10AM +0000, Alistair Grant wrote:
> > Hi All,
> > 
> > I'm nearly ready to submit a patch that started with the goal of being
> > able to retrieve the device id and fixing FileReference>>isSymlink and 
> > also follows Esteban's suggestion of splitting out file existence and 
> > other attributes (which provides a performace gain).  See the summary
> > below for a description of the changes.
> > 
> > The patch involves adding a new VM plugin, FileAttriubutesPlugin.  To 
> > minimise the chance of any problems along the way I'd like to submit the 
> > patch in three steps:
> > 
> > 1. Add the VM plugin (FileAttributesPlugin)
> > 2. Add the code the image that allows testing of the code and plugin, 
> >    but doesn't do any integration with existing functionality.
> >    This will allow the plugin to be tested by a few volunteers 
> >    (hopefully).
> > 3. Add the patches that make the switch over to the new implementation.
> > 
> 
> I think you are handling this in exactly the right way, kudos.
> 
> > 
> > Can someone point me to how to submit a new VM plugin?  The code is 
> > contained in a subclass of InterpreterPlugin.
> 
> Following up on the vm-dev list: If your plugin is available in a Monticello
> repository, that would be great because VM builders can easily include it
> and try it out. Any repository would be fine for starters, or if you have
> an account on squeaksource.com I can add you as developer in the somewhat
> loosely-related DirectoryPlugin project if that is of any help. Whatever is
> convenient for you.

smalltalkhub.com is probably easiest for me, thanks.


> Your plugin sounds like something that would be stable and require little
> maintenance over time, so it might make sense to pull it directly into
> the VMMaker package. We can discuss that vm-dev list.

I'm hoping this will become a core part of Pharo, so ultimately it 
should live with the other Pharo core plugins like FilePlugin (assuming 
it is accepted, of course).


> Once your plugin code is available, it should be straighforward to start
> including it in the various VM build configurations.

Great, thanks.  build.linux32x86/pharo.cog.spur is probably the best 
place to start.

I should be able to post the plugin to smalltalkhub.com quite 
quickly.  The smalltalk code will take me a while to repackage as I'll 
want to test it fairly carefully, and my time is very scattered (this is 
my hobby, but lots of family demands :-)).


As a side effect, once this has been fully integrated it will be 
possible to get rid of at least some of the "#if Pharo" type 
conditionals in the FilePlugin, allowing the code to be tidied up.

I'll post another reply once I've got the plugin code in 
smalltalkhub.com.


Thanks again,
Alistair



> Dave
> 
> 
> > 
> > I've been using this as my production environment for about 2 months now 
> > on a linux 32 bit VM.  Running the full test suite results in the same 
> > set of test failing before and after applying the patch.
> > 
> > I've also ran file related tests on linux 64 bit (run the Test Runner, 
> > select all packages with "file" as part of the name and run all the 
> > available tests) and the full test suite on Windows 32 bit.
> > 
> > The summary is:
> > 
> > 1. #isSymlink now works properly on Linux (and it should also work on 
> >    MacOS and BSD).
> > 2. The list of file attributes available from FileReference now is:
> > 	#accessTime (new)
> > 	#changeTime (new)
> > 	#creationTime
> > 	#deviceId (new)
> > 	#exists
> > 	#gid (new)
> > 	#inode (new)
> > 	#isBlock (new)
> > 	#isCharacter (new)
> > 	#isDirectory
> > 	#isExecutable (new)
> > 	#isFIFO (new)
> > 	#isFile
> > 	#isReadable
> > 	#isRegular (new)
> > 	#isSocket (new)
> > 	#isSymlink (works)
> > 	#isWritable
> > 	#modificationTime
> > 	#numberOfHardLinks (new)
> > 	#permissions
> > 	#size
> > 	#targetFile (new)
> > 	#uid (new)
> > 3. FileReference>>exists is faster than before (well, at least on my 
> >    linux laptop).  This is useful as it is called quite often.
> > 4. It is possible to retrieve symbolic link attributes, e.g. all the 
> >    attributes listed above plus the target path.
> > 
> > 
> > Given how similar MacOS and BSD are to linux, I assume that this will 
> > all work without problem on those platforms (but it obviously needs to 
> > be tested).
> > 
> > As implied above, the changes are all backward compatible (except 
> > the broken #isSymlink), although a couple deserve mention:
> > 
> > 1. Obviously #isSymlink now answers correctly (previously it would only 
> >    answer correctly for a broken link).
> > 2. Requesting any of the attributes listed above (except #isSymlink) 
> >    will return the value of the target path.  If the FileReference is to a 
> >    broken symbolic link, it will return the attributes of the symbolic 
> >    link (keeping existing behaviour).
> > 3. The attributes of a symbolic link can be retrieved using 
> >    FileReference>>symlinkAttributes.
> > 
> > Overall, performance is slightly better than before.  Code that
> > needs to access multiple attributes and is written to take advantage of 
> > the new behaviour will see significant performance improvements.
> > 
> > 
> > If you've got this far and forgotten the original question :-)
> > 
> > Can someone point me to how to submit a new VM plugin?
> > 
> > 
> > Thanks,
> > Alistair


More information about the Vm-dev mailing list