11# ===================================================================
2- # GitAliases.Extras .psm1
2+ # git-aliases-extra .psm1
33#
44# Extends posh-git and git-aliases with custom functions and
55# adds robust tab completion for all git aliases.
@@ -158,6 +158,11 @@ function Format-GitAliasDefinitionSafe {
158158}
159159
160160function Get-GitAliasEntries {
161+ param (
162+ [ValidateSet (' all' , ' base' , ' extras' )]
163+ [string ]$Source = ' all'
164+ )
165+
161166 $blacklist = @ (
162167 ' Get-Git-CurrentBranch' ,
163168 ' Remove-Alias' ,
@@ -169,13 +174,17 @@ function Get-GitAliasEntries {
169174 )
170175
171176 $modulePriority = @ {
172- ' GitAliases.Extras ' = 0
177+ ' git-aliases-extra ' = 0
173178 ' git-aliases' = 1
174179 }
180+ $moduleSource = @ {
181+ ' git-aliases-extra' = ' extras'
182+ ' git-aliases' = ' base'
183+ }
175184
176185 $entries = @ ()
177186 $aliasNamePattern = ' ^g[0-9A-Za-z!]+$'
178- foreach ($moduleName in @ (' GitAliases.Extras ' , ' git-aliases' )) {
187+ foreach ($moduleName in @ (' git-aliases-extra ' , ' git-aliases' )) {
179188 $commands = Get-Command - Module $moduleName - ErrorAction SilentlyContinue |
180189 Where-Object {
181190 $_.Name -notin $blacklist -and
@@ -197,39 +206,72 @@ function Get-GitAliasEntries {
197206 Name = $command.Name
198207 Definition = $definition
199208 ModuleName = $moduleName
209+ Source = $moduleSource [$moduleName ]
200210 Priority = $modulePriority [$moduleName ]
201211 }
202212 }
203213 }
204214
205- return $entries |
206- Sort-Object Priority, Name |
207- Group-Object Name |
208- ForEach-Object { $_.Group [0 ] } |
209- Sort-Object Name
215+ if ($Source -ne ' all' ) {
216+ return $entries |
217+ Where-Object { $_.Source -eq $Source } |
218+ Sort-Object Name
219+ }
220+
221+ $ordered = $entries | Sort-Object Priority, Name
222+ $seen = @ {}
223+ $result = foreach ($entry in $ordered ) {
224+ if (-not $seen.ContainsKey ($entry.Name )) {
225+ $seen [$entry.Name ] = $true
226+ $entry
227+ }
228+ }
229+
230+ return @ ($result )
210231}
211232
212233function Get-Git-Aliases {
213234 [CmdletBinding ()]
214235 param (
215236 [AllowEmptyString ()]
216- [string ]$Alias
237+ [string ]$Alias ,
238+ [switch ]$Base ,
239+ [switch ]$Extras
217240 )
218241
242+ if ($Base -and $Extras ) {
243+ Write-Error " Use either -Base or -Extras, not both." - ErrorAction Stop
244+ }
245+
246+ $source = ' all'
247+ if ($Base ) { $source = ' base' }
248+ if ($Extras ) { $source = ' extras' }
249+
219250 $Alias = if ($null -eq $Alias ) { ' ' } else { $Alias.Trim () }
220- $aliases = Get-GitAliasEntries
251+ $aliases = Get-GitAliasEntries - Source $source
221252
222253 if (-not ([string ]::IsNullOrWhiteSpace($Alias ))) {
223254 $foundAlias = $aliases | Where-Object { $_.Name -eq $Alias } | Select-Object - First 1
224255 if ($null -eq $foundAlias ) {
225- Write-Error " Alias '$Alias ' not found." - ErrorAction Stop
256+ $scopeText = switch ($source ) {
257+ ' base' { ' in base aliases' }
258+ ' extras' { ' in extras aliases' }
259+ default { ' ' }
260+ }
261+ Write-Error (" Alias '{0}' not found{1}." -f $Alias , $scopeText ) - ErrorAction Stop
226262 }
227263
228264 return $foundAlias.Definition
229265 }
230266
267+ if ($source -in @ (' base' , ' extras' )) {
268+ return $aliases |
269+ Select-Object Name, Definition |
270+ Format-Table - AutoSize - Wrap
271+ }
272+
231273 return $aliases |
232- Select-Object Name, ModuleName , Definition |
274+ Select-Object Name, Source , Definition |
233275 Format-Table - AutoSize - Wrap
234276}
235277
0 commit comments