Alistair did I miss some pending PR to be integrated for FS? I'm getting back to reality after a totally fun and intense ESUG conference. Stef
On Thu, Sep 7, 2017 at 8:26 AM, Alistair Grant <akgrant0...@gmail.com> wrote: > Hi Andreas, > > On Wed, Sep 06, 2017 at 04:53:27PM -0700, Andreas Sunardi wrote: >> Hi Alistair, >> >> I found fogbugz #19717 where this was discussed. >> >> https://pharo.fogbugz.com/f/cases/19717/ >> FileSystem-workingDirectory-wrong-after-image-moved-to-a-new-folder >> >> The issue seems to be the current working directory is saved in instance >> variable workingDirectory. When the image is moved to another directory, this >> workingDirectory becomes incorrect. Instance variable 'store', through its # >> defaultWorkingDirectory, always gives the right answer (however, this answer >> is >> the image directory, not directory where the command is invoked, which is the >> issue in #05723 you mentioned). >> >> Here's a snippet from fogbugz #19717 original problem on how to reproduce it: >> QUOTE >> 1/ open an image. evaluate './pharo-local' asFileReference and keep the >> inspector. >> 2/ save and quit >> 3/ move the image to another directory >> 4/ open the image >> 5/ evaluate self fullName on the file reference => it will give a wrong path >> with a reference to the working directory used at file reference creation. >> ENDQUOTE > > Thanks for finding this! > > In #20164 I reintroduced caching the working directory, but update it > when the session is stopped and started, so the above test produces the > expected results. As you can see in the comments for the associated PR, > caching the value was a significant peformance improvement for at least > one person. > https://pharo.fogbugz.com/f/cases/20164/Caching-DiskStore-defaultWorkingDirectory > > >> I don't know if it's still debatable, which './pharo-local' the file >> reference >> should refer to, but I think I agree with fogbugz #19717 that it should stay >> as >> relative path. >> >> But this is a separate issue than losing the ability to change working >> directory, which seems to me an unintentional side-effect in the solution. >> I'll >> see if I can jump onto $05723 to request support for changing working >> directory. >> >> On a side note, is current working directory the same as image directory in >> Pharo? I wonder why we have these issues if they are separate things. I >> haven't >> dived into this, so I can't say much. > > Yes, which was the original driver for #05723. After it is integrated > the working directory will be the process working directory. The image > directory can of course still be accessed with FileLocator > imageDirectory. > > Cheers, > Alistair > > >> -- >> Andreas >> >> On Wed, Sep 6, 2017 at 12:42 PM, Alistair Grant <akgrant0...@gmail.com> >> wrote: >> >> On Wed, Sep 06, 2017 at 10:50:05AM -0700, Andreas Sunardi wrote: >> > It isn't only #changeDirectory: method that is missing. Method # >> > workingDirectoryPath: and instance variable workingDirectory are also >> missing. >> > >> > FileSystem >> changeDirectory: aPath >> > self workingDirectoryPath: (self resolve: aPath) >> > >> > FileSystem >> workingDirectoryPath: aPath >> > aPath isAbsolute >> > ifFalse: [ self error: 'Cannot set the working directory to a >> relative >> > path' ]. >> > workingDirectory := aPath >> > >> > >> > To solve my problem, I implemented those and also fixed # >> initializeWithStore: >> > and changed #workingDirectoryPath >> > >> > FileSystem >> initializeWithStore: aStore >> > store := aStore. >> > workingDirectory := store defaultWorkingDirectory >> > >> > FileSystem >> workingDirectoryPath >> > ^ workingDirectory >> > >> > >> > Those are from Pharo 5. However, this breaks Monticello (when opening >> > Monticello Browser). A FileSystem instance has instance variable >> > workingDirectory set to nil. This should be impossible. I set 'self >> halt' >> in # >> > initializeWithStore:. It doesn't get triggered, which tells me the >> instance >> > isn't created by normal way. I don't know what's going on there. >> > >> > >> > To fix it, I changed #workingDirectoryPath to >> > >> > FileSystem >> workingDirectoryPath >> > workingDirectory ifNil: [ >> > workingDirectory := store defaultWorkingDirectory ]. >> > ^ workingDirectory >> > >> > >> > That solves my problem, but this is a specific tool. I don't know what >> other >> > problems those changes will cause. This #ifNil: guard is not in Pharo >> 5, >> so >> > that makes me worry. In general, the change in FileSystem gives >> impression that >> > the it is intentional. But I haven't found the new Pharo 6.1 way to >> change >> > working directory, if there's any. >> >> I couldn't find a fogbugz issue relating to this - if anyone knows the >> issue, please post it here as it would be good to understand the >> rationale for the change. >> >> My interpretation of the changes are that the decision was made to hard >> code the working directory to the image directory. There are quite a >> few people who don't agree with this. :-) >> >> There is already a proposed patch to change the working directory to the >> process working directory, see fogbugz #05723. >> https://pharo.fogbugz.com/f/cases/5723/Default-Working-Directory >> >> The patch is waiting on a fix to include UFFI in the kernel. >> >> It currently doesn't allow the working directory to be changed, >> but if I remember correctly, Rajula developed the code to change the >> working directory. >> >> I think this approach has the advantage that it will automtically work >> with forked processes, e.g. using OSProcess / OSSubprocess. >> >> It would be worthwhile adding a comment to the issue asking Rajula to >> add the change directory functionality to the patch. >> >> Cheers, >> Alistair >> >> >> >> > -- >> > Andreas >> > >> > On Tue, Sep 5, 2017 at 12:46 AM, Stephane Ducasse < >> stepharo.s...@gmail.com> >> > wrote: >> > >> > Thanks for reporting. >> > I do not remember an action around me for this change. >> > Do you have the definition in Pharo 50 at hand? >> > >> > Stef >> > >> > On Wed, Aug 30, 2017 at 11:09 PM, Andreas Sunardi < >> a.suna...@gmail.com> >> > wrote: >> > > I found FileSystem class has changed from Pharo 5 to Pharo 6. >> I've >> been >> > > using FileSystem>>changeDirectory to make my program (Pharo 5) >> runs >> in >> > the >> > > current working directory (thus able to find local files). >> > > >> > > This is now broken because #changeDirectory doesn't exist >> anymore. >> The >> > > change seems intentional. >> > > >> > > Question: Is there a different way in Pharo 6 do set working >> directory or >> > is >> > > this a bug? >> > > >> > > -- >> > > Andreas >