|
@@ -30,7 +30,7 @@ type Tree struct {
|
|
|
|
|
|
var escapeChar = []byte("\\")
|
|
|
|
|
|
-func unescapeChars(in []byte) []byte {
|
|
|
+func UnescapeChars(in []byte) []byte {
|
|
|
if bytes.Index(in, escapeChar) == -1 {
|
|
|
return in
|
|
|
}
|
|
@@ -39,12 +39,11 @@ func unescapeChars(in []byte) []byte {
|
|
|
isEscape := false
|
|
|
out := make([]byte, 0, endIdx+1)
|
|
|
for i := range in {
|
|
|
- if in[i] == '\\' && i != endIdx {
|
|
|
- isEscape = !isEscape
|
|
|
- if isEscape {
|
|
|
- continue
|
|
|
- }
|
|
|
+ if in[i] == '\\' && !isEscape {
|
|
|
+ isEscape = true
|
|
|
+ continue
|
|
|
}
|
|
|
+ isEscape = false
|
|
|
out = append(out, in[i])
|
|
|
}
|
|
|
return out
|
|
@@ -92,11 +91,12 @@ func parseTreeData(tree *Tree, data []byte) ([]*TreeEntry, error) {
|
|
|
pos += step + 1 // Skip half of sha1.
|
|
|
|
|
|
step = bytes.IndexByte(data[pos:], '\n')
|
|
|
- entry.name = string(data[pos : pos+step])
|
|
|
|
|
|
// In case entry name is surrounded by double quotes(it happens only in git-shell).
|
|
|
- if entry.name[0] == '"' {
|
|
|
- entry.name = string(unescapeChars(data[pos+1 : pos+step-1]))
|
|
|
+ if data[pos] == '"' {
|
|
|
+ entry.name = string(UnescapeChars(data[pos+1 : pos+step-1]))
|
|
|
+ } else {
|
|
|
+ entry.name = string(data[pos : pos+step])
|
|
|
}
|
|
|
|
|
|
pos += step + 1
|