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 {
|
} else if eq := strings.Index(s, "="); eq > -1 {
|
||||||
attr.K = s[:eq]
|
attr.K = s[:eq]
|
||||||
attr.V = s[eq+1:]
|
attr.V = s[eq+1:]
|
||||||
|
} else {
|
||||||
|
attr.K = s
|
||||||
|
attr.V = "true"
|
||||||
}
|
}
|
||||||
|
|
||||||
attrs = append(attrs, &attr)
|
attrs = append(attrs, &attr)
|
||||||
|
@ -22,18 +22,19 @@ func TestParseLines(t *testing.T) {
|
|||||||
|
|
||||||
func TestParseLinesManyAttrs(t *testing.T) {
|
func TestParseLinesManyAttrs(t *testing.T) {
|
||||||
lines, err := ParseLines(strings.NewReader(
|
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.NoError(t, err)
|
||||||
|
|
||||||
assert.Len(t, lines, 1)
|
assert.Len(t, lines, 1)
|
||||||
assert.Equal(t, lines[0].Pattern.String(), "*.dat")
|
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[0], &Attr{K: "filter", V: "lfs"})
|
||||||
assert.Equal(t, lines[0].Attrs[1], &Attr{K: "diff", 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[2], &Attr{K: "merge", V: "lfs"})
|
||||||
assert.Equal(t, lines[0].Attrs[3], &Attr{K: "text", V: "false"})
|
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) {
|
func TestParseLinesManyLines(t *testing.T) {
|
||||||
@ -41,14 +42,16 @@ func TestParseLinesManyLines(t *testing.T) {
|
|||||||
"*.dat filter=lfs diff=lfs merge=lfs -text",
|
"*.dat filter=lfs diff=lfs merge=lfs -text",
|
||||||
"*.jpg filter=lfs diff=lfs merge=lfs -text",
|
"*.jpg filter=lfs diff=lfs merge=lfs -text",
|
||||||
"# *.pdf 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.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[0].Pattern.String(), "*.dat")
|
||||||
assert.Equal(t, lines[1].Pattern.String(), "*.jpg")
|
assert.Equal(t, lines[1].Pattern.String(), "*.jpg")
|
||||||
assert.Equal(t, lines[2].Pattern.String(), "*.png")
|
assert.Equal(t, lines[2].Pattern.String(), "*.png")
|
||||||
|
assert.Equal(t, lines[3].Pattern.String(), "*.txt")
|
||||||
|
|
||||||
assert.Len(t, lines[0].Attrs, 4)
|
assert.Len(t, lines[0].Attrs, 4)
|
||||||
assert.Equal(t, lines[0].Attrs[0], &Attr{K: "filter", V: "lfs"})
|
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[1], &Attr{K: "diff", V: "lfs"})
|
||||||
assert.Equal(t, lines[2].Attrs[2], &Attr{K: "merge", 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.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) {
|
func TestParseLinesUnset(t *testing.T) {
|
||||||
|
Loading…
Reference in New Issue
Block a user