On Wed, Jun 15, 2011 at 11:20 PM, Jose Armando Garcia <span dir="ltr"><<a href="mailto:jsancio@gmail.com">jsancio@gmail.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

On Wed, Jun 15, 2011 at 5:22 AM, Lars Tandle Kyllingstad<br>
<div><div></div><div class="h5"><<a href="mailto:lars@kyllingen.net">lars@kyllingen.net</a>> wrote:<br>
> On Sun, 2011-06-12 at 15:35 -0300, Jose Armando Garcia wrote:<br>
>> On Sun, Jun 12, 2011 at 3:26 PM, Jose Armando Garcia <<a href="mailto:jsancio@gmail.com">jsancio@gmail.com</a>> wrote:<br>
>> > Em 12/06/2011, ŕs 14:00, Lars Tandle Kyllingstad <<a href="mailto:lars@kyllingen.net">lars@kyllingen.net</a>><br>
>> > escreveu:<br>
>> ><br>
>> >> On Sun, 2011-06-12 at 13:36 -0300, Jose Armando Garcia wrote:<br>
>> >>><br>
>> >>> On Sun, Jun 12, 2011 at 12:59 PM, Lars Tandle Kyllingstad<br>
>> >>> <<a href="mailto:lars@kyllingen.net">lars@kyllingen.net</a>> wrote:<br>
>> >>>><br>
>> >>>> On Sun, 2011-06-12 at 12:41 -0300, Jose Armando Garcia wrote:<br>
>> >>>>><br>
>> >>>>> On Sun, Jun 12, 2011 at 12:15 PM, Lars Tandle Kyllingstad<br>
>> >>>>> <<a href="mailto:lars@kyllingen.net">lars@kyllingen.net</a>> wrote:<br>
>> >>>>>><br>
>> >>>>>> On Sun, 2011-06-12 at 11:39 -0300, Jose Armando Garcia wrote:<br>
>> >>>>>>><br>
>> >>>>>>> On Wed, Jun 8, 2011 at 4:29 PM, Lars Tandle Kyllingstad<br>
>> >>>>>><br>
>> >>>>>> These functions are from the old std.path, and I haven't made any<br>
>> >>>>>> changes to them in my version.<br>
>> >>>>>><br>
>> >>>>>> - toAbsolute()<br>
>> >>>>>> - toCanonical()<br>
>> >>>>>><br>
>> >>>>><br>
>> >>>>> In the comments where you say that it doesn't perform any IO you<br>
>> >>>>> should add these functions.<br>
>> >>>><br>
>> >>>> Does getcwd() perform any IO on Windows?  AFAIK, on POSIX it just<br>
>> >>>> queries /proc/self/cwd, which is a virtual file.<br>
>> >>>><br>
>> >>><br>
>> >>> The way I look at IO is anything that is external to the process.<br>
>> >>> Another way to thinking about it is that<br>
>> >>> toAbsolute()'s and toCanonical()'s result is dependent on state<br>
>> >>> outside of the process. While the rest of the templates/functions<br>
>> >>> aren't.<br>
>> >><br>
>> >> The way I've interpreted the "no IO" principle of std.path is "no<br>
>> >> disk/network IO", since those would come with an enormous performance<br>
>> >> penalty as compared to in-memory operations.  But maybe you are right.<br>
>> >><br>
>> >><br>
>> >>>>> Speaking of which can we add a template<br>
>> >>>>> called normalize (maybe you can come up with a better name) that does<br>
>> >>>>> what canonical does but doesn't make it absolute. E.g.:<br>
>> >>>>><br>
>> >>>>> version(windows) assert(normilize("dir/file") == "dir\\file");<br>
>> >>>>> version(windows) assert(normilize("dir/./file") == "dir\\file");<br>
>> >>>>> //etc<br>
>> >>>><br>
>> >>>> That sounds like a good idea.  Then I guess normalize("../foo") should<br>
>> >>>> just return "..\\foo", i.e. leave the ".." unresolved?<br>
>> >>>><br>
>> >>><br>
>> >>> It is hard to resolve '..' without looking at the file system when<br>
>> >>> considering soft/sym link due to multiple parents. if 'somedir' is a<br>
>> >>> simlink "somedir/../" != ".".<br>
>> >><br>
>> >> That is a matter of choice, I guess.  In both bash and zsh, if I type<br>
>> >><br>
>> >>  cd some_dir/some_symlink/..<br>
>> >><br>
>> >> I end up in some_dir, regardless of where some_symlink is pointing.<br>
>> >> That is how toCanonical() does things as well, and how I think<br>
>> >> normalize() should work if I end up adding that.<br>
>> ><br>
>> > But most program dont behave this way. For example ls, less and vim don't do<br>
>> > that. I am okay with resolving symlinks but just take note.<br>
>><br>
>> Err. I am okay with resolving "..".<br>
><br>
> I have thought some more about this, and I think I will simply remove<br>
> toCanonical() and replace it with normalize().  After all,<br>
><br>
>    auto canonicalPath = normalize(toAbsolute(path));<br>
><br>
> What do you think?<br>
><br>
> -Lars<br>
><br>
<br>
</div></div>The idea looks good to me but the naming seems off to me. I don't like<br>
toAbsolute. To me to...() methods imply conversion of type. Think<br>
'toString', which takes some object and makes it a string. Or the<br>
template function 'to'... Maybe just 'absolute' is fine.<br>
<div><div></div><div class="h5">_______________________________________________<br>
phobos mailing list<br>
<a href="mailto:phobos@puremagic.com">phobos@puremagic.com</a><br>
<a href="http://lists.puremagic.com/mailman/listinfo/phobos" target="_blank">http://lists.puremagic.com/mailman/listinfo/phobos</a><br>
</div></div></blockquote></div><br><div><br></div><div>I agree, 'toAbsolute' should be 'absolutePath'</div><div>absolutePath(mypath) -> the absolute path from mypath</div><div>extension(mypath) -> the extension from mypath</div>

<div>driveName(mypath) -> the drive name from mypath</div><div>etc</div><div><br></div><div>Also, why is there an extra 'path' link in the Jump To section of the docs?</div>