Staging flattens a culture directory's .psd1 into the output root
まだ誰も着手していません。
- 主要言語
- PowerShell
- スター
- 145
- フォーク
- 27
- 平均マージ
- 10時間 16分
- マージ済み PR(30日)
- 34
説明
Found while researching #207. Reading the code confirms it; it is also visible in that issue's own reproduction output.
What happens
Build-PSBuildModule stages the module's loose files with:
$getChildItemSplat = @{
Path = $Path
Include = "*.psm1", "*.psd1", "*.ps1xml"
Depth = 1
}
Get-ChildItem @getChildItemSplat |
Copy-Item -Destination $DestinationPath -Force
-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 isCopyDirectories' job. Smallest change. - Preserve relative paths when copying, so
en-US/Messages.psd1lands aten-US/Messages.psd1. More faithful, and it would partly address #210 — but it makes the glob a second, implicit staging mechanism competing withCopyDirectories, which is how the two got tangled in the first place. - Leave it. The stray file is inert.
(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.
コントリビューションガイド
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
issue に記載されている Build-PSBuildModule のステージング ロジックから始め、depth の動作を変更する前に関連する issue #206、#207、#210 を確認してください。root マニフェストとモジュール ファイルが引き続き正しくステージングされ、ローカライズされた en-US/Messages.psd1 が出力 root にコピーされないことを検証してください。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- powershell
- 領域
- build-system
- issue の種類
- バグ
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 活発さ
- 活発
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 74/100