-
-
Notifications
You must be signed in to change notification settings - Fork 2
Feat/windows junction support #2985
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
Draft
ChanTsune
wants to merge
30
commits into
main
Choose a base branch
from
feat/windows-junction-support
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
30 commits
Select commit
Hold shift + click to select a range
bdeedfa
:memo: Add implementation plan for Windows junction support
ChanTsune b18001a
:memo: Rework junction plan after grill review
ChanTsune 87112b5
:memo: Align junction plan with existing Windows module tree
ChanTsune 5aafee6
:memo: Close junction external-target mutation hole in plan
ChanTsune 1415ff4
:memo: Translate HRESULT to Win32 code in reparse error wrapping
ChanTsune ee00271
:memo: Formalize Windows junction support design spec
ChanTsune aca7a3d
:memo: Slim junction plan to reference the spec
ChanTsune e8c4214
:sparkles: Add Windows reparse buffer parser in CLI
ChanTsune 87cce03
:art: Sort windows feature list alphabetically
ChanTsune 04d0af4
:white_check_mark: Cover symlink reparse buffer parsing
ChanTsune b7b3750
:sparkles: Read NTFS reparse points via DeviceIoControl
ChanTsune 36c08f0
:recycle: Align read_reparse_point with CLI FFI conventions
ChanTsune bc2e048
:sparkles: Create NTFS junctions via FSCTL_SET_REPARSE_POINT
ChanTsune a1d2c1e
:lock: Reject oversized junction targets before mutating filesystem
ChanTsune b7d7634
:sparkles: Add detect_junction helper for CLI
ChanTsune 17cbfdf
:sparkles: Add PathnameEditor::edit_junction delegating to shared helper
ChanTsune f9e247c
:art: Align edit_junction test names and doc comment with conventions
ChanTsune 01a7378
:bug: Terminate junction reparse names with UTF-16 NUL
ChanTsune e55c25a
:sparkles: Detect and archive Windows junctions as HardLink entries
ChanTsune 362a6d1
:recycle: Route junction target through PathnameEditor::edit_junction
ChanTsune 762bc75
:sparkles: Extract HardLink+fLTP=Directory as junction or symlink fal…
ChanTsune aede98e
:art: Polish Task 4.1 extract branch per code-quality review
ChanTsune 7f0d976
:white_check_mark: Cover junction extract round-trip across platforms
ChanTsune 41600fa
:bug: Gate junction round-trip test off WASM
ChanTsune 838e618
:white_check_mark: End-to-end junction round trip via CLI
ChanTsune 3f76715
:art: Hoist file_type() call in junction round-trip test
ChanTsune c746bc0
:white_check_mark: Pin junction extract does-not-mutate-target invariant
ChanTsune 075e191
:bug: Load-bearing I2 fence: stamp Permission chunk in junction fixture
ChanTsune 00bfc1c
:bug: Pass --unstable alongside --keep-permission on Windows
ChanTsune 86ca0da
:memo: Document junction handling in --allow-unsafe-links
ChanTsune File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Using
std::fs::canonicalizehere will fail if the junction target does not yet exist on disk, which is common when extracting an archive containing both a directory and a junction pointing to it. Ifcanonicalizefails, the code falls back tojoined, which might be a relative path. However,create_junction(inreparse.rs) explicitly rejects relative targets.Consider using
std::path::absoluteto ensure the path is absolute without requiring it to exist on disk, while still attemptingcanonicalizefor a cleaner path if possible.