-
Notifications
You must be signed in to change notification settings - Fork 8.1k
Fix Move-Item with wildcard to non-existent destination flattening first directory #26604
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
Copilot
wants to merge
14
commits into
master
Choose a base branch
from
copilot/fix-move-item-wildcard-issue
base: master
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.
+72
−9
Draft
Changes from all commits
Commits
Show all changes
14 commits
Select commit
Hold shift + click to select a range
10ba694
Initial plan
Copilot 13cfcae
Fix Move-Item wildcard bug - preserve directory structure
Copilot bd47771
Simplify fix by removing redundant parent existence check
Copilot 2c8a38c
Avoid duplicate ItemExists check by caching result
Copilot c038b6e
Refactor to eliminate duplicate MakePath call
Copilot 59e273c
Revert "Refactor to eliminate duplicate MakePath call"
Copilot 98a08c2
Fix: Only treat non-existent destination as container when parent exists
Copilot 5369559
Fix wildcard move at SessionState level instead of provider
Copilot e38c682
Fix: Use destination provider instance for creating destination direc…
Copilot a3b381e
Fix: Use destinationContext and add null checks
Copilot e9881be
Add verbose debug output to diagnose directory creation issue
Copilot 77f0817
Add -Verbose switch to test to enable diagnostic output
Copilot 9b18849
Fix wildcard move at cmdlet level instead of SessionState level
Copilot 758bc57
Fix compile error: Use correct signature for InvokeProvider.Item.New
Copilot 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
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -2984,21 +2984,49 @@ private Collection<PathInfo> GetResolvedPaths(string path) | |
| /// </summary> | ||
| protected override void ProcessRecord() | ||
| { | ||
| foreach (string path in Path) | ||
| // When moving multiple items with wildcards to a non-existent destination, | ||
| // we need to create the destination directory first to ensure all items | ||
| // preserve their directory structure. Otherwise, the first directory gets | ||
| // renamed to the destination, and subsequent items are moved into it. | ||
|
|
||
| if (!base.SuppressWildcardExpansion) | ||
| { | ||
| if (base.SuppressWildcardExpansion) | ||
| { | ||
| MoveItem(path, literalPath: true); | ||
| } | ||
| else | ||
| // First, collect all resolved paths to determine if we're moving multiple items | ||
| var allResolvedPaths = new List<string>(); | ||
| foreach (string path in Path) | ||
| { | ||
| Collection<PathInfo> resolvedPaths = GetResolvedPaths(path); | ||
|
|
||
| foreach (PathInfo resolvedPathInfo in resolvedPaths) | ||
| { | ||
| string resolvedPath = resolvedPathInfo.Path; | ||
| MoveItem(resolvedPath, literalPath: true); | ||
| allResolvedPaths.Add(resolvedPathInfo.Path); | ||
| } | ||
| } | ||
|
|
||
| // If moving multiple items and destination doesn't exist, create it first | ||
| if (allResolvedPaths.Count > 1 && !InvokeProvider.Item.Exists(Destination)) | ||
| { | ||
| try | ||
| { | ||
| InvokeProvider.Item.New(Destination, null, "Directory", null, CmdletProviderContext); | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @copilot Please use named arguments for null-s.
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @copilot Please address my request. |
||
| } | ||
| catch (Exception) | ||
| { | ||
| // If creation fails, continue anyway - the move operation will handle the error | ||
| } | ||
| } | ||
|
|
||
| // Now proceed with the moves | ||
| foreach (string resolvedPath in allResolvedPaths) | ||
| { | ||
| MoveItem(resolvedPath, literalPath: true); | ||
| } | ||
| } | ||
| else | ||
| { | ||
| // Literal path mode - process each path directly | ||
| foreach (string path in Path) | ||
| { | ||
| MoveItem(path, literalPath: true); | ||
| } | ||
| } | ||
| } | ||
|
|
||
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.
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.
@copilot Please remove the extra line.