Path * '' vs. Path workingDirectory

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Path * '' vs. Path workingDirectory

alistairgrant
Hi All,

Is there any practical difference between (Path * '') and (Path
workingDirectory)?

Their internal representation is different:

- (Path * '') has one empty segment
- Path workingDirectory has no segments

But as far as I can tell they are otherwise the same:


| fs frEmpty frWD |

fs := FileSystem disk.
frEmpty := FileReference fileSystem: fs path: (Path * '').
frWD := FileReference fileSystem: fs path: Path workingDirectory.
String streamContents: [ :stream |
stream
        << 'frEmpty: ';
        << frEmpty printString; cr;
        << 'frWD: ';
        << frWD printString; cr;
        << '= : ';
        << (frEmpty absolutePath = frWD absolutePath) printString; cr.
]

'frEmpty: "File @ "
frWD: "File @ ."
= : true
'


Cheers,
Alistair

Reply | Threaded
Open this post in threaded view
|

Re: Path * '' vs. Path workingDirectory

Guillermo Polito


On Sun, Aug 13, 2017 at 5:54 PM, Alistair Grant <[hidden email]> wrote:
Hi All,

Is there any practical difference between (Path * '') and (Path
workingDirectory)?

Being strict, Path workingDirectory does not make any sense. A path is relative or absolute. And it is relative to some other path.

I'd expect that Path workingDirectory gives you an absolute path to the current working directory,,,


Their internal representation is different:

- (Path * '') has one empty segment
- Path workingDirectory has no segments

But as far as I can tell they are otherwise the same:


| fs frEmpty frWD |

fs := FileSystem disk.
frEmpty := FileReference fileSystem: fs path: (Path * '').
frWD := FileReference fileSystem: fs path: Path workingDirectory.
String streamContents: [ :stream |
stream
        << 'frEmpty: ';
        << frEmpty printString; cr;
        << 'frWD: ';
        << frWD printString; cr;
        << '= : ';
        << (frEmpty absolutePath = frWD absolutePath) printString; cr.
]

'frEmpty: "File @ "
frWD: "File @ ."
= : true
'


Cheers,
Alistair




--

   

Guille Polito


Research Engineer

French National Center for Scientific Research - http://www.cnrs.fr



Web: http://guillep.github.io

Phone: +33 06 52 70 66 13

Reply | Threaded
Open this post in threaded view
|

Re: Path * '' vs. Path workingDirectory

alistairgrant
Hi Guille,

Thanks for your reply.


On Mon, Aug 14, 2017 at 01:44:41PM +0200, Guillermo Polito wrote:

>
>
> On Sun, Aug 13, 2017 at 5:54 PM, Alistair Grant <[hidden email]> wrote:
>
>     Hi All,
>
>     Is there any practical difference between (Path * '') and (Path
>     workingDirectory)?
>
>
> Being strict, Path workingDirectory does not make any sense. A path is relative
> or absolute.

True, but Path is considered internal, so users shouldn't normally be
calling Path>>workingDirectory.

I'm asking because the patch I'm preparing to improve canonicalisation
affects the creation of the path in some instances ('.' asFileReference
used to have a path with an empty segment, now it has Path
workingDirectory).

Just for the record :-)

Path workingDirectory isRelative  " true"


> And it is relative to some other path.

Right, Pharo defines the image directory as the working directory (although
https://github.com/pharo-project/pharo/pull/92 will change that to the
more common shell interpretation of current working directory).


> I'd expect that Path workingDirectory gives you an absolute path to the current
> working directory,,,

But the path doesn't have a file system to resolve against.

Although even FileLocator workingDirectory gives a relative path.



Thanks again,
Alistair



>     Their internal representation is different:
>
>     - (Path * '') has one empty segment
>     - Path workingDirectory has no segments
>
>     But as far as I can tell they are otherwise the same:
>
>
>     | fs frEmpty frWD |
>
>     fs := FileSystem disk.
>     frEmpty := FileReference fileSystem: fs path: (Path * '').
>     frWD := FileReference fileSystem: fs path: Path workingDirectory.
>     String streamContents: [ :stream |
>     stream
>             << 'frEmpty: ';
>             << frEmpty printString; cr;
>             << 'frWD: ';
>             << frWD printString; cr;
>             << '= : ';
>             << (frEmpty absolutePath = frWD absolutePath) printString; cr.
>     ]
>
>     'frEmpty: "File @ "
>     frWD: "File @ ."
>     = : true
>     '
>
>
>     Cheers,
>     Alistair
>
>
>
>
>
> --
>                  Guille Polito
> [CNRS-filaire]
>
>                  Research Engineer
>
>                  French National Center for Scientific Research - http://
>                  www.cnrs.fr
>
>
>
>                  Web: http://guillep.github.io
>
>                  Phone: +33 06 52 70 66 13
>

Reply | Threaded
Open this post in threaded view
|

Re: Path * '' vs. Path workingDirectory

Guillermo Polito


On Mon, Aug 14, 2017 at 4:11 PM, Alistair Grant <[hidden email]> wrote:
Hi Guille,

Thanks for your reply.


On Mon, Aug 14, 2017 at 01:44:41PM +0200, Guillermo Polito wrote:
>
>
> On Sun, Aug 13, 2017 at 5:54 PM, Alistair Grant <[hidden email]> wrote:
>
>     Hi All,
>
>     Is there any practical difference between (Path * '') and (Path
>     workingDirectory)?
>
>
> Being strict, Path workingDirectory does not make any sense. A path is relative
> or absolute.

True, but Path is considered internal, so users shouldn't normally be
calling Path>>workingDirectory.

Ah, I was thinking with Pablo the other day that it could be a nice small and standalone library to manage paths. Then FileSystem can work on top. What do you think?

That's why with Pablo we extracted the Path classes in a separate package (FileSystem-Path). We also see it has few dependencies and this means that it could go into the bootstrap :).
 

I'm asking because the patch I'm preparing to improve canonicalisation
affects the creation of the path in some instances ('.' asFileReference
used to have a path with an empty segment, now it has Path
workingDirectory).

Just for the record :-)

Path workingDirectory isRelative  " true"


> And it is relative to some other path.

Right, Pharo defines the image directory as the working directory (although
https://github.com/pharo-project/pharo/pull/92 will change that to the
more common shell interpretation of current working directory).


> I'd expect that Path workingDirectory gives you an absolute path to the current
> working directory,,,

But the path doesn't have a file system to resolve against.

Although even FileLocator workingDirectory gives a relative path.



Thanks again,
Alistair



>     Their internal representation is different:
>
>     - (Path * '') has one empty segment
>     - Path workingDirectory has no segments
>
>     But as far as I can tell they are otherwise the same:
>
>
>     | fs frEmpty frWD |
>
>     fs := FileSystem disk.
>     frEmpty := FileReference fileSystem: fs path: (Path * '').
>     frWD := FileReference fileSystem: fs path: Path workingDirectory.
>     String streamContents: [ :stream |
>     stream
>             << 'frEmpty: ';
>             << frEmpty printString; cr;
>             << 'frWD: ';
>             << frWD printString; cr;
>             << '= : ';
>             << (frEmpty absolutePath = frWD absolutePath) printString; cr.
>     ]
>
>     'frEmpty: "File @ "
>     frWD: "File @ ."
>     = : true
>     '
>
>
>     Cheers,
>     Alistair
>
>
>
>
>
> --
>                  Guille Polito
> [CNRS-filaire]
>
>                  Research Engineer
>
>                  French National Center for Scientific Research - http://
>                  www.cnrs.fr
>
>
>
>                  Web: http://guillep.github.io
>
>                  Phone: <a href="tel:%2B33%2006%2052%2070%2066%2013" value="+33652706613">+33 06 52 70 66 13
>




--

   

Guille Polito


Research Engineer

French National Center for Scientific Research - http://www.cnrs.fr



Web: http://guillep.github.io

Phone: +33 06 52 70 66 13