-
-
Notifications
You must be signed in to change notification settings - Fork 966
Join Pathlike Object to Tree
#2094
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Join Pathlike Object to Tree
#2094
Conversation
|
Thanks a lot, this looks very good to me! It's a bit sad that we have some test duplication to validate various types, but I guess it's better than not having them. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR extends the Tree.join and Tree.__truediv__ API to support pathlike objects (such as pathlib.Path), enabling more Pythonic path handling when traversing Git tree objects. Previously, users had to explicitly convert Path objects to strings; now they can use them directly with the / operator.
- Type annotations updated from
strtoPathLikefor both methods - Implementation uses
os.fspath()to convert PathLike objects to strings - Comprehensive test coverage added for PathLike support with various scenarios
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| git/objects/tree.py | Updated join() and __truediv__() methods to accept PathLike parameters; added os.fspath() conversion; imported os module |
| test/test_tree.py | Added comprehensive test cases for string and PathLike path lookups covering simple, nested, folder, and invalid path scenarios; imported pytest, Repo, and PathLikeMock |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
test/test_tree.py
Outdated
| blob = repo.tree() / "git" | ||
| assert isinstance(blob, Tree) | ||
| assert blob.hexsha == "ec8ae429156d65afde4bbb3455570193b56f0977" | ||
|
|
||
| @with_rw_repo("0.3.2.1") | ||
| def test_repo_lookup_folder_pathlike_path(self, rw_repo): | ||
| repo = Repo(rw_repo.git_dir) | ||
| blob = repo.tree() / PathLikeMock("git") | ||
| assert isinstance(blob, Tree) | ||
| assert blob.hexsha == "ec8ae429156d65afde4bbb3455570193b56f0977" |
Copilot
AI
Dec 14, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The variable is named blob but is actually a Tree object (as confirmed by the assertion isinstance(blob, Tree)). Consider renaming it to tree or result for clarity.
| blob = repo.tree() / "git" | |
| assert isinstance(blob, Tree) | |
| assert blob.hexsha == "ec8ae429156d65afde4bbb3455570193b56f0977" | |
| @with_rw_repo("0.3.2.1") | |
| def test_repo_lookup_folder_pathlike_path(self, rw_repo): | |
| repo = Repo(rw_repo.git_dir) | |
| blob = repo.tree() / PathLikeMock("git") | |
| assert isinstance(blob, Tree) | |
| assert blob.hexsha == "ec8ae429156d65afde4bbb3455570193b56f0977" | |
| tree = repo.tree() / "git" | |
| assert isinstance(tree, Tree) | |
| assert tree.hexsha == "ec8ae429156d65afde4bbb3455570193b56f0977" | |
| @with_rw_repo("0.3.2.1") | |
| def test_repo_lookup_folder_pathlike_path(self, rw_repo): | |
| repo = Repo(rw_repo.git_dir) | |
| tree = repo.tree() / PathLikeMock("git") | |
| assert isinstance(tree, Tree) | |
| assert tree.hexsha == "ec8ae429156d65afde4bbb3455570193b56f0977" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.
Rename blob to tree Co-authored-by: Copilot <[email protected]>
This extends the
Tree.joinandTree.__truediv__API to allow a pathlike object.For example:
This did not work before without explicitly converting the
Pathto a string, but works now.