From b7dbf3ee975f2cc0c61456e06b839d37b8fb8f13 Mon Sep 17 00:00:00 2001 From: Chris Donnelly Date: Mon, 1 Oct 2018 10:23:09 -0500 Subject: [PATCH 1/3] Modifying tab completion for files to be relative. If you are in a subdirectory of a repo, tab-completion will now honor your current location. --- src/GitTabExpansion.ps1 | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/GitTabExpansion.ps1 b/src/GitTabExpansion.ps1 index afa2bc028..5ccb33039 100644 --- a/src/GitTabExpansion.ps1 +++ b/src/GitTabExpansion.ps1 @@ -168,39 +168,43 @@ function script:gitTfsShelvesets($filter) { quoteStringWithSpecialChars } -function script:gitFiles($filter, $files) { +function script:gitFiles($filter, $gitDir, $files) { + [string] $repoDir = Split-Path -Path $gitDir -Parent + $files | Sort-Object | Where-Object { $_ -like "$filter*" } | + ForEach-Object { Join-Path -Path $repoDir -ChildPath $_ } | + Resolve-Path -Relative | quoteStringWithSpecialChars } function script:gitIndex($GitStatus, $filter) { - gitFiles $filter $GitStatus.Index + gitFiles $filter $GitStatus.GitDir $GitStatus.Index } function script:gitAddFiles($GitStatus, $filter) { - gitFiles $filter (@($GitStatus.Working.Unmerged) + @($GitStatus.Working.Modified) + @($GitStatus.Working.Added)) + gitFiles $filter $GitStatus.GitDir (@($GitStatus.Working.Unmerged) + @($GitStatus.Working.Modified) + @($GitStatus.Working.Added)) } function script:gitCheckoutFiles($GitStatus, $filter) { - gitFiles $filter (@($GitStatus.Working.Unmerged) + @($GitStatus.Working.Modified) + @($GitStatus.Working.Deleted)) + gitFiles $filter $GitStatus.GitDir (@($GitStatus.Working.Unmerged) + @($GitStatus.Working.Modified) + @($GitStatus.Working.Deleted)) } function script:gitDiffFiles($GitStatus, $filter, $staged) { if ($staged) { - gitFiles $filter $GitStatus.Index.Modified + gitFiles $filter $GitStatus.GitDir $GitStatus.Index.Modified } else { - gitFiles $filter (@($GitStatus.Working.Unmerged) + @($GitStatus.Working.Modified) + @($GitStatus.Index.Modified)) + gitFiles $filter $GitStatus.GitDir (@($GitStatus.Working.Unmerged) + @($GitStatus.Working.Modified) + @($GitStatus.Index.Modified)) } } function script:gitMergeFiles($GitStatus, $filter) { - gitFiles $filter $GitStatus.Working.Unmerged + gitFiles $filter $GitStatus.GitDir $GitStatus.Working.Unmerged } function script:gitDeleted($GitStatus, $filter) { - gitFiles $filter $GitStatus.Working.Deleted + gitFiles $filter $GitStatus.GitDir $GitStatus.Working.Deleted } function script:gitAliases($filter) { From 7bb89e40d5853d19a727271563906267f7db437b Mon Sep 17 00:00:00 2001 From: Chris Donnelly Date: Mon, 1 Oct 2018 13:43:01 -0500 Subject: [PATCH 2/3] Modifying tests to return paths with leading "./". Resolve-Path always renders files with a leading ".\" (Windows) or "./" (everything else). This differs from how paths were returned before, so now the tests are changing to reflect this. It is also now consistent with how tab completion works for other PowerShell commands (e.g., Get-ChildItem), so it shouldn't be a problem. --- test/TabExpansion.Tests.ps1 | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/TabExpansion.Tests.ps1 b/test/TabExpansion.Tests.ps1 index 99ce4656c..0399a7e43 100644 --- a/test/TabExpansion.Tests.ps1 +++ b/test/TabExpansion.Tests.ps1 @@ -196,12 +196,13 @@ Describe 'TabExpansion Tests' { &$gitbin config core.quotepath true # Problematic (default) config $fileName = "posh$([char]8226)git.txt" - New-Item $fileName -ItemType File + $file = New-Item $fileName -ItemType File + $expected = ($file | Resolve-Path -Relative) # ./posh\u8226git.txt or .\posh\u8226git.txt, depending on OS $gitStatus = & $module Get-GitStatus $result = & $module GitTabExpansionInternal 'git add ' $gitStatus - $result | Should BeExactly $fileName + $result | Should BeExactly $expected } } @@ -299,12 +300,13 @@ Describe 'TabExpansion Tests' { } It 'Tab completes add file in working dir with special char as quoted' { $filename = 'foo{bar} (x86).txt'; - New-Item $filename -ItemType File + $file = New-Item $filename -ItemType File + $expected = ($file | Resolve-Path -Relative) # ./posh\u8226git.txt or .\posh\u8226git.txt, depending on OS $gitStatus = & $module Get-GitStatus $result = & $module GitTabExpansionInternal 'git add ' $gitStatus - $result | Should BeExactly "'$filename'" + $result | Should BeExactly "'$expected'" } } } From a1b7aa118ef32de79c020b72805160997d4dbf31 Mon Sep 17 00:00:00 2001 From: Chris Donnelly Date: Thu, 4 Oct 2018 17:06:53 -0500 Subject: [PATCH 3/3] Removing unnecessary cast. --- src/GitTabExpansion.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GitTabExpansion.ps1 b/src/GitTabExpansion.ps1 index 5ccb33039..31c56c613 100644 --- a/src/GitTabExpansion.ps1 +++ b/src/GitTabExpansion.ps1 @@ -169,7 +169,7 @@ function script:gitTfsShelvesets($filter) { } function script:gitFiles($filter, $gitDir, $files) { - [string] $repoDir = Split-Path -Path $gitDir -Parent + $repoDir = Split-Path -Path $gitDir -Parent $files | Sort-Object | Where-Object { $_ -like "$filter*" } |