diff options
Diffstat (limited to 'pkg/commands')
-rw-r--r-- | pkg/commands/git.go | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/pkg/commands/git.go b/pkg/commands/git.go index 624588fc2..5744fa6aa 100644 --- a/pkg/commands/git.go +++ b/pkg/commands/git.go @@ -173,28 +173,37 @@ func (c *GitCommand) MergeStatusFiles(oldFiles, newFiles []File) []File { return newFiles } - headResults := []File{} - tailResults := []File{} + appendedIndexes := []int{} - for _, newFile := range newFiles { - var isHeadResult bool - - for _, oldFile := range oldFiles { + // retain position of files we already could see + result := []File{} + for _, oldFile := range oldFiles { + for newIndex, newFile := range newFiles { if oldFile.Name == newFile.Name { - isHeadResult = true + result = append(result, newFile) + appendedIndexes = append(appendedIndexes, newIndex) break } } + } - if isHeadResult { - headResults = append(headResults, newFile) - continue + // append any new files to the end + for index, newFile := range newFiles { + if !includesInt(appendedIndexes, index) { + result = append(result, newFile) } - - tailResults = append(tailResults, newFile) } - return append(headResults, tailResults...) + return result +} + +func includesInt(list []int, a int) bool { + for _, b := range list { + if b == a { + return true + } + } + return false } // GetBranchName branch name |