git/gitattr/attr{,_test}.go: parse implicitly 'true' attributes
When an attribute does not start with '!', '-', or contain an '=', we had previously treated it as malformed. Instead, assume that it is a 'set' attribute, which we interpret to mean as being set implicitly to "true" (and therefore the dual of the '-' prefix). From the relevant documentation [1]: Set The path has the attribute with special value "true"; this is specified by listing only the name of the attribute in the attribute list. [1]: https://git-scm.com/docs/gitattributes
This commit is contained in:
parent
cd915358ba
commit
5a54097c4b
@ -105,6 +105,9 @@ func ParseLines(r io.Reader) ([]*Line, error) {
|
||||
} else if eq := strings.Index(s, "="); eq > -1 {
|
||||
attr.K = s[:eq]
|
||||
attr.V = s[eq+1:]
|
||||
} else {
|
||||
attr.K = s
|
||||
attr.V = "true"
|
||||
}
|
||||
|
||||
attrs = append(attrs, &attr)
|
||||
|
@ -22,18 +22,19 @@ func TestParseLines(t *testing.T) {
|
||||
|
||||
func TestParseLinesManyAttrs(t *testing.T) {
|
||||
lines, err := ParseLines(strings.NewReader(
|
||||
"*.dat filter=lfs diff=lfs merge=lfs -text"))
|
||||
"*.dat filter=lfs diff=lfs merge=lfs -text crlf"))
|
||||
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Len(t, lines, 1)
|
||||
assert.Equal(t, lines[0].Pattern.String(), "*.dat")
|
||||
|
||||
assert.Len(t, lines[0].Attrs, 4)
|
||||
assert.Len(t, lines[0].Attrs, 5)
|
||||
assert.Equal(t, lines[0].Attrs[0], &Attr{K: "filter", V: "lfs"})
|
||||
assert.Equal(t, lines[0].Attrs[1], &Attr{K: "diff", V: "lfs"})
|
||||
assert.Equal(t, lines[0].Attrs[2], &Attr{K: "merge", V: "lfs"})
|
||||
assert.Equal(t, lines[0].Attrs[3], &Attr{K: "text", V: "false"})
|
||||
assert.Equal(t, lines[0].Attrs[4], &Attr{K: "crlf", V: "true"})
|
||||
}
|
||||
|
||||
func TestParseLinesManyLines(t *testing.T) {
|
||||
@ -41,14 +42,16 @@ func TestParseLinesManyLines(t *testing.T) {
|
||||
"*.dat filter=lfs diff=lfs merge=lfs -text",
|
||||
"*.jpg filter=lfs diff=lfs merge=lfs -text",
|
||||
"# *.pdf filter=lfs diff=lfs merge=lfs -text",
|
||||
"*.png filter=lfs diff=lfs merge=lfs -text"}, "\n")))
|
||||
"*.png filter=lfs diff=lfs merge=lfs -text",
|
||||
"*.txt text"}, "\n")))
|
||||
|
||||
assert.NoError(t, err)
|
||||
|
||||
assert.Len(t, lines, 3)
|
||||
assert.Len(t, lines, 4)
|
||||
assert.Equal(t, lines[0].Pattern.String(), "*.dat")
|
||||
assert.Equal(t, lines[1].Pattern.String(), "*.jpg")
|
||||
assert.Equal(t, lines[2].Pattern.String(), "*.png")
|
||||
assert.Equal(t, lines[3].Pattern.String(), "*.txt")
|
||||
|
||||
assert.Len(t, lines[0].Attrs, 4)
|
||||
assert.Equal(t, lines[0].Attrs[0], &Attr{K: "filter", V: "lfs"})
|
||||
@ -67,6 +70,9 @@ func TestParseLinesManyLines(t *testing.T) {
|
||||
assert.Equal(t, lines[2].Attrs[1], &Attr{K: "diff", V: "lfs"})
|
||||
assert.Equal(t, lines[2].Attrs[2], &Attr{K: "merge", V: "lfs"})
|
||||
assert.Equal(t, lines[2].Attrs[3], &Attr{K: "text", V: "false"})
|
||||
|
||||
assert.Len(t, lines[3].Attrs, 1)
|
||||
assert.Equal(t, lines[3].Attrs[0], &Attr{K: "text", V: "true"})
|
||||
}
|
||||
|
||||
func TestParseLinesUnset(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user