You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-Depth 1 implies recursion one level down, so this matches en-US/Messages.psd1 — and Copy-Item -Destination $DestinationPath writes it flat into the output root, discarding the directory it came from.
A module with a localized Messages.psd1 therefore builds an output containing a stray Messages.psd1 at the root that nothing reads. If CopyDirectories also names en-US, the correct copy is there too, and the built tree carries both.
Why it matters, mildly
Nothing breaks. Import-LocalizedData resolves through the culture directory and ignores the stray file, and a module without a culture directory never hits it. The costs are that the published package carries a file that serves no purpose and misleads anyone reading the tree, and that a consumer debugging localization finds two copies of the same file and has to work out which one is live.
It is also the same root cause as #210, seen from the other side: the depth-1 glob is trying to serve two purposes — collect the root manifest and module file, and leave everything else to CopyDirectories — and reaches one level too far.
Options
Drop -Depth 1, so the glob matches only the root. The manifest and root module are always at the root, so nothing intended is lost. Anything deeper is CopyDirectories' job. Smallest change.
(1) looks right, and it is a one-word deletion. But -Depth 1 was presumably added deliberately at some point, and I could not find what for — worth a moment's thought before removing it, in case some layout depends on it.
Related: #206, #207 and #210 are all in this same staging logic. Worth deciding together.
Found while researching #207. Reading the code confirms it; it is also visible in that issue's own reproduction output.
What happens
Build-PSBuildModulestages the module's loose files with:-Depth 1implies recursion one level down, so this matchesen-US/Messages.psd1— andCopy-Item -Destination $DestinationPathwrites it flat into the output root, discarding the directory it came from.A module with a localized
Messages.psd1therefore builds an output containing a strayMessages.psd1at the root that nothing reads. IfCopyDirectoriesalso namesen-US, the correct copy is there too, and the built tree carries both.Why it matters, mildly
Nothing breaks.
Import-LocalizedDataresolves through the culture directory and ignores the stray file, and a module without a culture directory never hits it. The costs are that the published package carries a file that serves no purpose and misleads anyone reading the tree, and that a consumer debugging localization finds two copies of the same file and has to work out which one is live.It is also the same root cause as #210, seen from the other side: the depth-1 glob is trying to serve two purposes — collect the root manifest and module file, and leave everything else to
CopyDirectories— and reaches one level too far.Options
-Depth 1, so the glob matches only the root. The manifest and root module are always at the root, so nothing intended is lost. Anything deeper isCopyDirectories' job. Smallest change.en-US/Messages.psd1lands aten-US/Messages.psd1. More faithful, and it would partly address Compiling drops a hand-written about_<Module>.help.txt unless CopyDirectories names the culture directory #210 — but it makes the glob a second, implicit staging mechanism competing withCopyDirectories, which is how the two got tangled in the first place.(1) looks right, and it is a one-word deletion. But
-Depth 1was presumably added deliberately at some point, and I could not find what for — worth a moment's thought before removing it, in case some layout depends on it.Related: #206, #207 and #210 are all in this same staging logic. Worth deciding together.