Get-WinGetManifest logic is broken around how it performs path detection
@RDMacLachlan ci sta già lavorando.
Dal 5/10/2022.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Brief description of your issue
When processing files in a directory, $PathChildItemsJSON and/or $PathChildItemsYAML may be null. This is not accounted for in the subsequent if/else statements that perform validation. If one or the other is null, this will fail internally because of null references. Strict mode is not enabled for these scripts, so the failure cause is not obvious to the caller:
VERBOSE: Path pointed to a directory, found 0 JSON files, and 0 YAML files.
Get-WinGetManifest: D:\b\winget-cli-restsource-ameltzer\bin\Library\Add-WinGetManifest.ps1:109:32
Line |
109 | $ApplicationManifest = Get-WinGetManifest -Path $Path
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Directory does not contain any combination of JSON and YAML files.
VERBOSE: Returning (0) manifests based on search.
Exception: D:\b\winget-cli-restsource-ameltzer\bin\Library\Add-WinGetManifest.ps1:111:13
Line |
111 | throw "Failed to retrieve a proper manifest. Verify and t …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Failed to retrieve a proper manifest. Verify and try again.
This gives the appearance of there being no YAML or JSON files, but there's actually 4 yaml files in my directory. Running again with Set-StrictMode -Version Latest shows detailed failure information:
VERBOSE: Retrieving a copy of the app Manifest file for submission to WinGet source.
PropertyNotFoundException: D:\b\winget-cli-restsource-ameltzer\bin\Library\Get-WinGetManifest.ps1:162:77
Line |
162 | … ath pointed to a directory, found $($PathChildItemsJSON.count) JSON f …
| ~~~~~~~~~~~~~~~~~~~~~~~~~
| The property 'count' cannot be found on this object. Verify that the property exists.
VERBOSE: Path pointed to a directory, found JSON files, and 4 YAML files.
PropertyNotFoundException: D:\b\winget-cli-restsource-ameltzer\bin\Library\Get-WinGetManifest.ps1:166:24
Line |
166 | … if($PathChildItemsJSON.count -eq 0 -and $PathChildItemsYAML. …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| The property 'count' cannot be found on this object. Verify that the property exists.
InvalidOperation: D:\b\winget-cli-restsource-ameltzer\bin\Library\Get-WinGetManifest.ps1:264:25
Line |
264 | switch ($ManifestFileType) {
| ~~~~~~~~~~~~~~~~~
| The variable '$ManifestFileType' cannot be retrieved because it has not been set.
This can be fixed by doing this:
$PathChildItemsJSON = Get-ChildItem -Path $Path -Filter "*.json" -ErrorAction SilentlyContinue
if (!$PathChildItemsJSON) {
$PathChildItemsJSON = @()
}
$PathChildItemsYAML = Get-ChildItem -Path $Path -Filter "*.yaml" -ErrorAction SilentlyContinue
if (!$PathChildItemsYAML) {
$PathChildItemsYAML = @()
}
Unfortunately, while fixing this works around the null reference issues, it then runs into #179 :(
VERBOSE: Retrieving a copy of the app Manifest file for submission to WinGet source.
VERBOSE: Path pointed to a directory, found 0 JSON files, and 4 YAML files.
VERBOSE: Single YAML has been found in the specified directory.
Get-WinGetManifest: D:\b\winget-cli-restsource-ameltzer\bin\Library\Add-WinGetManifest.ps1:109:32
Line |
109 | $ApplicationManifest = Get-WinGetManifest -Path $Path
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Unable to process YAML files. Re-import the module to reload the required dependencies.
VERBOSE: Returning (0) manifests based on search.
Exception: D:\b\winget-cli-restsource-ameltzer\bin\Library\Add-WinGetManifest.ps1:111:13
Line |
111 | throw "Failed to retrieve a proper manifest. Verify and t …
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Failed to retrieve a proper manifest. Verify and try again.
Steps to reproduce
Run Add-WinGetManifest and point to a path with .yaml documents.
- Lingua principale
- C#
- Stelle
- 317
- Fork
- 79
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
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.
Altre issue di microsoft/winget-cli-restsource
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
-
Issue-Feature
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
-
Font Support ApertaIssue-Feature
microsoft/winget-cli-restsource#310 · 1 commento · 1 assegnatario ·
-
Issue Deploying in GCC-H ApertaIssue-Bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
microsoft/winget-cli-restsource#309 · 2 commenti ·
Tutte le issue di microsoft/winget-cli-restsource
Issue simili
-
effort:S P3 refactor
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
nightscout/nocturne#1532 ·
-
core dependencies
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 80/100
-
documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
C#/.NET Roslyn LSP Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Suspicious code fragments Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
DotNetNext/SqlSugar#1458 ·