1- # region Piecemeal [ 0.3.10 ] : Easy Extensible Plugins for PowerShell
1+ # region Piecemeal [ 0.4.1 ] : Easy Extensible Plugins for PowerShell
22# Install-Module Piecemeal -Scope CurrentUser
33# Import-Module Piecemeal -Force
44# Install-Piecemeal -ExtensionModule 'ugit' -ExtensionModuleAlias 'git' -ExtensionNoun 'UGitExtension' -ExtensionTypeName 'ugit.extension' -OutputPath '.\Get-UGitExtension.ps1'
@@ -614,6 +614,8 @@ function Get-UGitExtension
614614
615615 $ExtensionDynamicParameters = [Management.Automation.RuntimeDefinedParameterDictionary ]::new()
616616 $Extension = $this
617+ $ExtensionMetadata = $Extension -as [Management.Automation.CommandMetaData ]
618+ if (-not $ExtensionMetadata ) { return $ExtensionDynamicParameters }
617619
618620 :nextDynamicParameter foreach ($in in @ (($Extension -as [Management.Automation.CommandMetaData ]).Parameters.Keys)) {
619621 $attrList = [Collections.Generic.List [Attribute ]]::new()
@@ -1042,12 +1044,16 @@ function Get-UGitExtension
10421044
10431045 if ($Force ) {
10441046 $script :UGitExtensions = $null
1047+ $script :UGitExtensionsByName = $null
10451048 $script :AllCommands = @ ()
10461049 }
10471050 if (-not $script :UGitExtensions )
10481051 {
1049- $script :UGitExtensionsFromFiles = [Ordered ]@ {}
1050- $script :UGitExtensionsFileTimes = [Ordered ]@ {}
1052+ $script :UGitExtensionsFromFiles = [Ordered ]@ {}
1053+ $script :UGitExtensionsFileTimes = [Ordered ]@ {}
1054+ $script :UGitExtensionsByName = [Ordered ]@ {}
1055+ $script :UGitExtensionsByDisplayName = [Ordered ]@ {}
1056+ $script :UGitExtensionsByPattern = [Ordered ]@ {}
10511057 $script :UGitExtensions =
10521058 @ (@ (
10531059 # region Find UGitExtension in Loaded Modules
@@ -1093,14 +1099,54 @@ function Get-UGitExtension
10931099 $ExecutionContext.SessionState.InvokeCommand.GetCommands (' *' , ' Function,Alias' , $true ) -match $extensionFullRegex
10941100 # endregion Find UGitExtension in Loaded Commands
10951101 ) | Select-Object - Unique | Sort-Object Rank, Name)
1102+
1103+ foreach ($extCmd in $script :UGitExtensions ) {
1104+ if (-not $script :UGitExtensionsByName [$extCmd.Name ]) {
1105+ $script :UGitExtensionsByName [$extCmd.Name ] = $extCmd
1106+ }
1107+ else {
1108+ $script :UGitExtensionsByName [$extCmd.Name ] = @ ($script :UGitExtensionsByName [$extCmd.Name ]) + $extCmd
1109+ }
1110+ if ($extCmd.DisplayName ) {
1111+ if (-not $script :UGitExtensionsByDisplayName [$extCmd.DisplayName ]) {
1112+ $script :UGitExtensionsByDisplayName [$extCmd.DisplayName ] = $extCmd
1113+ }
1114+ else {
1115+ $script :UGitExtensionsByDisplayName [$extCmd.DisplayName ] = @ ($script :UGitExtensionsByDisplayName [$extCmd.DisplayName ]) + $extCmd
1116+ }
1117+ }
1118+ $ExtensionCommandAliases = @ ($extCmd.Attributes.AliasNames )
1119+ $ExtensionCommandAliasRegexes = @ ($ExtensionCommandAliases -match ' ^/' -match ' /$' )
1120+ $ExtensionCommandNormalAliases = @ ($ExtensionCommandAliases -notmatch ' ^/' )
1121+ if ($ExtensionCommandAliasRegexes ) {
1122+ foreach ($extensionAliasRegex in $ExtensionCommandAliasRegexes ) {
1123+ $regex = [Regex ]::New($extensionAliasRegex -replace ' ^/' -replace ' /$' , ' IgnoreCase,IgnorePatternWhitespace' )
1124+ if (-not $script :UGitExtensionsByPattern [$regex ]) {
1125+ $script :UGitExtensionsByPattern [$regex ] = $extCmd
1126+ } else {
1127+ $script :UGitExtensionsByPattern [$regex ] = @ ($script :UGitExtensionsByPattern [$regex ]) + $extCmd
1128+ }
1129+ }
1130+ }
1131+ if ($ExtensionCommandNormalAliases ) {
1132+ foreach ($extensionAlias in $ExtensionCommandNormalAliases ) {
1133+ if (-not $script :UGitExtensionsByName [$extensionAlias ]) {
1134+ $script :UGitExtensionsByName [$extensionAlias ] = $extCmd
1135+ } else {
1136+ $script :UGitExtensionsByName [$extensionAlias ] = @ ($script :UGitExtensionsByName [$extensionAlias ]) + $extCmd
1137+ }
1138+ }
1139+ }
1140+
1141+ }
10961142 }
10971143 # endregion Find Extensions
10981144 }
10991145
11001146 process {
11011147
11021148 if ($UGitExtensionPath ) {
1103- @ (foreach ($_ in Get-ChildItem - Recurse - Path $UGitExtensionPath - File) {
1149+ @ (foreach ($_ in Get-ChildItem - Recurse: $ ( $UGitExtensionPath -notmatch ' ^\.[\\/] ' ) - Path $UGitExtensionPath - File) {
11041150 if ($_.Name -notmatch $extensionFullRegex ) { continue }
11051151 if ($CommandName -or $UGitExtensionName ) {
11061152 ConvertToExtension $_ |
@@ -1118,14 +1164,34 @@ function Get-UGitExtension
11181164 # This section can be updated by using Install-Piecemeal -ForeachObject
11191165 # endregion Install-Piecemeal -ForeachObject
11201166 } elseif ($CommandName -or $UGitExtensionName ) {
1121- $script :UGitExtensions |
1122- . WhereExtends $CommandName |
1123- OutputExtension
1167+ if (-not $CommandName -and -not $like -and -not $Match ) {
1168+ foreach ($exn in $UGitExtensionName ) {
1169+ if ($script :UGitExtensionsByName [$exn ]) {
1170+ $script :UGitExtensionsByName [$exn ] | OutputExtension
1171+ }
1172+ if ($script :UGitExtensionsByDisplayName [$exn ]) {
1173+ $script :UGitExtensionsByDisplayName [$exn ] | OutputExtension
1174+ }
1175+ if ($script :UGitExtensionsByPattern.Count ) {
1176+ foreach ($patternAndValue in $script :UGitExtensionsByPattern.GetEnumerator ()) {
1177+ if ($patternAndValue.Key.IsMatch ($exn )) {
1178+ $patternAndValue.Value | OutputExtension
1179+ }
1180+ }
1181+ $script :UGitExtensionsByDisplayName [$exn ]
1182+ }
1183+ }
1184+ } else {
1185+ $script :UGitExtensions |
1186+ . WhereExtends $CommandName |
1187+ OutputExtension
1188+ }
1189+
11241190 } else {
11251191 $script :UGitExtensions |
11261192 OutputExtension
11271193 }
11281194 }
11291195}
1130- # endregion Piecemeal [ 0.3.10 ] : Easy Extensible Plugins for PowerShell
1196+ # endregion Piecemeal [ 0.4.1 ] : Easy Extensible Plugins for PowerShell
11311197
0 commit comments