Staging flattens a culture directory's .psd1 into the output root
Nessuno ha ancora preso questa issue.
- Lingua principale
- PowerShell
- Stelle
- 145
- Fork
- 27
- Merge medio
- 10h 16m
- PR unite (30g)
- 34
Descrizione
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.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia dalla logica di staging di Build-PSBuildModule descritta nell’issue e rivedi le issue correlate #206, #207 e #210 prima di modificare il comportamento di depth. Verifica che il manifest root e i file del modulo continuino a essere messi correttamente in staging, mentre un file localizzato en-US/Messages.psd1 non venga copiato nella root dell’output.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- powershell
- Ambito
- build-system
- Tipo di issue
- Bug
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Stato di attività
- Attiva
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 74/100