LxLeChat / FlowChartCore

PowerShell Module Written in C# to create DOT graphs from PS Scripts
MIT License
18 stars 3 forks source link

Find-FlowChartNodes: les paramètres Path et LiteralPath doivent être exclusif #92

Closed LaurentDardenne closed 10 months ago

LaurentDardenne commented 3 years ago

Repro :

$script='G:\temp\[REF]\demo-ref.ps1'
$r=Find-FLowChartNodes -LiteralPath $Script
#cmdlet Find-FLowChartNodes at command pipeline position 1
#Supply values for the following parameters:
#Path[0]:
LaurentDardenne commented 3 years ago

Un effet de bord je pense :

$r=Find-FLowChartNodes -Path $Script
#Find-FLowChartNodes: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
LxLeChat commented 3 years ago

ok je vois ce que tu veux dire .. je suis entrain de me renseigner ... en 10 ans je crois que j'ai jamais écrit une fonction qui gérait correctement les path xD

LaurentDardenne commented 3 years ago

en 10 ans je crois que j'ai jamais écrit une fonction qui gérait correctement les path xD

Oui c'est LE truc compliqué sous PS. Tout ça pour répondre à une simple question : Le nom de chemin est-il un nom valide pour le FileSystem? Le plus simple est de laisser l'utilisateur gérer sa saisie ;-)

LxLeChat commented 3 years ago

j avais du mal a trouver un truc assez "clair" pour mon level ... mais je crois que j'ai trouvé mon bonheur avec get-filehash https://github.com/PowerShell/PowerShell/blob/3c1261f90db028b7ab2210fbb75ac40e8ff449cf/src/Microsoft.PowerShell.Commands.Utility/commands/utility/GetHash.cs

j'essaierai de faire comme ça .. ! ça semble le plus réaliste pour moi :)

LaurentDardenne commented 3 years ago

ça semble le plus réaliste pour moi :)

Tu m'étonnes ! Le code cité était une étude de cas qui s'est transformé en un casse tête chinois... Sinon ce premier projet communautaire sous PS avait bien cerné le sujet il me semble. Faudrait que je retrouve les parties réutilisable...

Ci-joint les path que l'on peut rencontrer en entrée : TestPathDatas.zip

Ici c'est juste de la lecture c'est déjà plus facile.

LxLeChat commented 3 years ago

ok j'ai résolu le problème normalement .. j essaye de mettre ça au propre bientot et de pousser avec le renommage de cmdlets :)

Du coup on peut faire -path ou -literalpath, le pipeline semble toujours correctement fonctionner ... ! et on ne peut pas spécifier les 2 en même temps bon j'ai pompé comme un gros sale le code de get-filehash ... :)

edit: et du coup plus les bugs du haut !

LaurentDardenne commented 3 years ago

et on ne peut pas spécifier les 2 en même temps

Ok :-) En passant la classe de PSCX qui gère les path.

LxLeChat commented 3 years ago

je récouvre car j'ai des problème des binding la ... genre get-flowchartnodes .\build.ps1 ... bah ça fonctionne pas.. donc je cherche ! en revanche du coup je me demande si je ne devrait pas ajotuer une propriété path, sur les objets node, quand ça vient d'un fichier ...

LxLeChat commented 3 years ago

ok normalement c bon C mergé du coup la cmdlet c'est maintenant Get-FlowChartNode

LaurentDardenne commented 3 years ago

en revanche du coup je me demande si je ne devrait pas ajouter une propriété path, sur les objets node, quand ça vient d'un fichier ...

On avait vu ceci :

Get-ChildItem -Path C\temp\*.ps1 -PipelineVariable FileName|
 New-FLowChartNodes|
 New-FLowChartGraph|
 Foreach-Object {
     $_
     "${FileName}.graph"
 }

Laisse l'utilisateur s'en charger, faut jsute le préciser dans la doc, ou le readme

ok normalement c bon

Presque ;-)

cd C:\Temp
'test' |set-content -LiteralPath 'c:\temp\test[1].ps1'
Get-FLowChartNode -LiteralPath 'c:\temp\test`[1`].ps1'
Get-FLowChartNode -Path 'c:\temp\test`[1`].ps1'
Get-FLowChartNode -LiteralPath 'c:\temp\test`[1`].ps1'

Get-FLowChartNode -Path 'c:\temp\test[1].ps1'
#Get-FLowChartNode: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
Get-FLowChartNode -LiteralPath 'c:\temp\test[1].ps1'
#Get-FLowChartNode: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
($ExecutionContext.SessionState.Path.GetResolvedProviderPathFromPSPath('.\test[1].ps1',$provider)[0]) -eq $null
#true
LxLeChat commented 3 years ago

arf j'ai du mal copié un truc ^^

LxLeChat commented 3 years ago

Hello @LaurentDardenne , sorry j'ai fait une pause, pas toucher à mon VSCODE depuis 1 mois .. :) je me disais que literalpath n'était peut-être pas nécessaire : If your cmdlet allows the user to specify a file or a data source, it should define a parameter of type System.String. If more than one drive is supported, the type should be an array. The name of the parameter should be Path, with an alias of PSPath. Additionally, the Path parameter should support wildcard characters. If support for wildcard characters is not required, define a LiteralPath parameter. effectivement les wildcards peuvent nous interesser, donc voila .. ! what do you think ?

LaurentDardenne commented 3 years ago

Salut,

j'ai fait une pause, pas toucher à mon VSCODE depuis 1 mois .. :)

Faut pas l'user ;-) De mon côté c'était l'inverse j'en faisais trop en entreprise.

je me disais que literalpath n'était peut-être pas nécessaire : effectivement les wildcards peuvent nous intéresser, donc voila .. ! what do you think ?

Ce que j'en pense, je ne suis pas sur de bien comprendre le texte: Additionally, the Path parameter should support wildcard characters. If support for wildcard characters is not required, define a LiteralPath parameter. Selon ce texte ce serait soit l'un soit l'autre. Là où tous les cmdlets natif gère l'un ET l'autre. ça m'embrouille plutôt qu'autre chose :-/

LxLeChat commented 3 years ago

oué pareillement ! bon je vais esayer juste avec PATH et voir si j'arrive à gérer le maximum de cas ... on verra bien !

LxLeChat commented 3 years ago

Hello @LaurentDardenne :) sorry ... ça faisait longtemps ... ah j'ai eu une petite perte de motiviation ! ayé j'ai bien recopié le code source de get-filehash, :p et normalement ça devrait être bon ... Evidemment en 2 mois j'ai tout oublié, du coup j'ai poussé direct sur la branche master -_- !

LaurentDardenne commented 3 years ago

Salut

Évidemment en 2 mois j'ai tout oublié

La même...

du coup j'ai poussé direct sur la branche master -_- !

GG ;-) Ce que des hommes on fait, d'autres peuvent le défaire.