Sorry, something went wrong.
There was a problem hiding this comment.
Drive-by comments from seeing this PR on discourse, feel free to disregard if I'm saying/asking something stupid.
Sorry, something went wrong.
|
Drive-by comments from seeing this PR on discourse, feel free to disregard if I'm saying/asking something stupid. Thanks for the review! All good feedback I think! |
Sorry, something went wrong.
There was a problem hiding this comment.
I'm persuaded that this is a good idea. Thanks for working on this!
Here's a docs review. Haven't got to looking at the implementation yet (will do soon).
Sorry, something went wrong.
There was a problem hiding this comment.
I believe there are currently no tests that os.path.splitroot works with os.PathLike objects. Just trivial tests like this should do fine, but we should make sure it's tested:
cpython/Lib/test/test_ntpath.py
Lines 946 to 947 in 0e75a55
Sorry, something went wrong.
|
A Python core developer has requested some changes be made to your pull request before we can consider merging it. If you could please address their requests along with any other requests in other reviews from core developers that would be appreciated. Once you have made the requested changes, please leave a comment on this pull request containing the phrase I have made the requested changes; please review again. I will then notify any core developers who have left a review that you're ready for them to take another look at this pull request. |
Sorry, something went wrong.
There was a problem hiding this comment.
This is looking really good to me now, and I'm very close to hitting "approve". My only concern (other than my comment about the NEWS entry) is that I'm still not sure the test coverage is quite there. It looks like the tests for splitdrive() account for a lot of edge cases that aren't really tackled in the tests for splitroot() yet, e.g.
cpython/Lib/test/test_ntpath.py
Lines 117 to 119 in e99e3cd
and
cpython/Lib/test/test_ntpath.py
Lines 129 to 130 in e99e3cd
It's true that, since splitdrive() now uses splitroot(), these edge cases are in some sense already covered -- the tests for splitdrive() will start failing if a bug is introduced to splitroot() at some later date in the future. But it will be highly confusing if the tests for splitdrive() start failing, yet the tests for splitroot() all still pass, when the bug is actually in the implementation for splitroot().
Sorry, something went wrong.
|
Hm. I could rename test_splitdrive to test_splitroot and adjust all the test cases - would that address your concern? (I'd add a new set of tests for splitdrive() that would cover just the basics) |
Sorry, something went wrong.
|
Hm. I could rename test_splitdrive to test_splitroot and adjust all the test cases - would that address your concern? (I'd add a new set of tests for splitdrive() that would cover just the basics) Yeah, I think that would make sense! |
Sorry, something went wrong.
There was a problem hiding this comment.
Looks great to me. Thanks, as ever, for your patience and perseverance!
@eryksun, Any further comments from you? :)
Sorry, something went wrong.
|
(Planning to merge in a few days, unless @eryksun has any further feedback :) |
Sorry, something went wrong.
This PR introduces os.path.splitroot(). See #101000 for motivation.
In ntpath, the implementation derives from splitdrive(). The splitdrive() function now calls splitroot(), and returns drive, root + tail. Other functions now call splitroot() rather than splitdrive(). In most cases this replaces their own parsing of path roots. It also avoids adding a stack frame.
In posixpath, the normpath() function now calls splitroot() rather than parsing path roots itself.
In pathlib, path constructors now call splitroot() rather than using a slow OS-agnostic implementation. Performance:
Future work: