Tomas Kalibera
2023-Feb-23 08:15 UTC
[Rd] Undocumented change of dirname("C:/") on R-devel on Windows
On 2/23/23 03:27, Hiroaki Yutani wrote:> Hi, > > I found dirname() behaves differently on R-devel on Windows. Since I'm not > sure which behavior is right, let me ask here before filing this to R's > Bigzilla. > > On R 4.2.2., we get > > > dirname("C:/") > [1] "C:/" > > However, on R-devel (r83888), we get > > > dirname("C:/") > [1] "." > > ?dirname says 'dirname returns the part of the path up to but excluding the > last path separator, or "." if there is no path separator,' but I don't see > how the root path is supposed to be treated based on this rule (, whether > it's WIndows or UNIX-alike).Thanks for spotting the difference, I've reverted to the previous behavior, the change was unintentional. If you spot any other suspicious changes in behavior in file-system operations, please report.> What should we expect as the return value of dirname("C:/")? I feel the > current behavior on R 4.2.2 is right, but I'd like to confirm.I also think the old behavior is better, even though it could be argued whether the "/" in "C:/" is a path separator or not, and whether it is trailing or not. But the behavior is in line with Unix where dirname of "/" is also "/". Msys2 would return "C:". If? "/" in "C:/" is a path separator but not a trailing path separator, then basename("C:/") should probably be "" and not "C:", and this would be in line with what R does on Unix. However, to be in line with Unix, I think the basename of "C:/" should be "C:/". Yet, Msys2 returns "C:" which is what R does now. So what these functions should do on Windows is definitely tricky. In either case the behavior is now again as in R 4.2.2. Best Tomas> > Best, > Yutani > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
Hiroaki Yutani
2023-Feb-23 11:12 UTC
[Rd] Undocumented change of dirname("C:/") on R-devel on Windows
Thanks for the prompt response, I'll confirm it after the new R-devel binary is available. Also, thanks for the detailed explanation. I agree with you in general.> "/" in "C:/" is a path separator or not, and whether it is trailing or notIt seems a Windows' path basically consists of two components; a drive specification (e.g., C:) and the directory structure within the drive. What I learned today is that both "C:/" and "C:" are valid path specifications, but refer to different locations; "C:" is not the root directory of the drive, but just a relative path [1]. So, I agree with you that the basename of "C:/" should be "C:/". However, at the same time, I don't feel this is worth a breaking change, so I think we can preserve the current (R 4.2.2) behavior. [1]: https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#apply-the-current-directory Best, Yutani 2023?2?23?(?) 17:15 Tomas Kalibera <tomas.kalibera at gmail.com>:> > On 2/23/23 03:27, Hiroaki Yutani wrote: > > Hi, > > > > I found dirname() behaves differently on R-devel on Windows. Since I'm > not > > sure which behavior is right, let me ask here before filing this to R's > > Bigzilla. > > > > On R 4.2.2., we get > > > > > dirname("C:/") > > [1] "C:/" > > > > However, on R-devel (r83888), we get > > > > > dirname("C:/") > > [1] "." > > > > ?dirname says 'dirname returns the part of the path up to but excluding > the > > last path separator, or "." if there is no path separator,' but I don't > see > > how the root path is supposed to be treated based on this rule (, whether > > it's WIndows or UNIX-alike). > Thanks for spotting the difference, I've reverted to the previous > behavior, the change was unintentional. If you spot any other suspicious > changes in behavior in file-system operations, please report. > > What should we expect as the return value of dirname("C:/")? I feel the > > current behavior on R 4.2.2 is right, but I'd like to confirm. > > I also think the old behavior is better, even though it could be argued > whether the "/" in "C:/" is a path separator or not, and whether it is > trailing or not. But the behavior is in line with Unix where dirname of > "/" is also "/". Msys2 would return "C:". > > If "/" in "C:/" is a path separator but not a trailing path separator, > then basename("C:/") should probably be "" and not "C:", and this would > be in line with what R does on Unix. However, to be in line with Unix, I > think the basename of "C:/" should be "C:/". Yet, Msys2 returns "C:" > which is what R does now. > > So what these functions should do on Windows is definitely tricky. In > either case the behavior is now again as in R 4.2.2. > > Best > Tomas > > > > > Best, > > Yutani > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]
Possibly Parallel Threads
- Undocumented change of dirname("C:/") on R-devel on Windows
- Undocumented change of dirname("C:/") on R-devel on Windows
- Undocumented change of dirname("C:/") on R-devel on Windows
- Undocumented change of dirname("C:/") on R-devel on Windows
- Is ALTREP "non-API"?