mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-01-04 03:48:07 +02:00
correctly show files with special chars in commit
This commit is contained in:
parent
9a087d04eb
commit
fc76b44b45
@ -1,8 +1,6 @@
|
||||
package filetree
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
)
|
||||
|
||||
@ -182,7 +180,7 @@ func (s *FileNode) NameAtDepth(depth int) string {
|
||||
prevName = join(splitPrevName[depth:])
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%s%s%s", prevName, " → ", name)
|
||||
return prevName + " → " + name
|
||||
}
|
||||
|
||||
return name
|
||||
|
@ -28,6 +28,7 @@ func GetCommitFileLine(name string, diffName string, commitFile *models.CommitFi
|
||||
}
|
||||
}
|
||||
|
||||
name = utils.EscapeSpecialChars(name)
|
||||
if commitFile == nil {
|
||||
return colour.Sprint(name)
|
||||
}
|
||||
|
@ -1,8 +1,6 @@
|
||||
package presentation
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/fatih/color"
|
||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||
"github.com/jesseduffield/lazygit/pkg/theme"
|
||||
@ -50,15 +48,7 @@ func GetFileLine(hasUnstagedChanges bool, hasStagedChanges bool, name string, di
|
||||
output += restColor.Sprint(" ")
|
||||
}
|
||||
|
||||
name = strings.NewReplacer(
|
||||
"\n", "\\n",
|
||||
"\r", "\\r",
|
||||
"\t", "\\t",
|
||||
"\b", "\\b",
|
||||
"\f", "\\f",
|
||||
"\v", "\\v",
|
||||
).Replace(name)
|
||||
output += restColor.Sprint(name)
|
||||
output += restColor.Sprint(utils.EscapeSpecialChars(name))
|
||||
|
||||
if file != nil && file.IsSubmodule(submoduleConfigs) {
|
||||
output += utils.ColoredString(" (submodule)", theme.DefaultTextColor)
|
||||
|
@ -32,3 +32,15 @@ func NormalizeLinefeeds(str string) string {
|
||||
str = strings.Replace(str, "\r", "", -1)
|
||||
return str
|
||||
}
|
||||
|
||||
// EscapeSpecialChars - Replaces all special chars like \n with \\n
|
||||
func EscapeSpecialChars(str string) string {
|
||||
return strings.NewReplacer(
|
||||
"\n", "\\n",
|
||||
"\r", "\\r",
|
||||
"\t", "\\t",
|
||||
"\b", "\\b",
|
||||
"\f", "\\f",
|
||||
"\v", "\\v",
|
||||
).Replace(str)
|
||||
}
|
||||
|
@ -133,3 +133,35 @@ func TestPrevIndex(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestEscapeSpecialChars(t *testing.T) {
|
||||
type scenario struct {
|
||||
testName string
|
||||
input string
|
||||
expected string
|
||||
}
|
||||
|
||||
scenarios := []scenario{
|
||||
{
|
||||
"normal string",
|
||||
"ab",
|
||||
"ab",
|
||||
},
|
||||
{
|
||||
"string with a special char",
|
||||
"a\nb",
|
||||
"a\\nb",
|
||||
},
|
||||
{
|
||||
"multiple special chars",
|
||||
"\n\r\t\b\f\v",
|
||||
"\\n\\r\\t\\b\\f\\v",
|
||||
},
|
||||
}
|
||||
|
||||
for _, s := range scenarios {
|
||||
t.Run(s.testName, func(t *testing.T) {
|
||||
assert.EqualValues(t, s.expected, EscapeSpecialChars(s.input))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user