39 lines
723 B
Go
39 lines
723 B
Go
package dockerfile2llb
|
|
|
|
import (
|
|
"bufio"
|
|
"io"
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
const keySyntax = "syntax"
|
|
|
|
var reDirective = regexp.MustCompile(`^#\s*([a-zA-Z][a-zA-Z0-9]*)\s*=\s*(.+?)\s*$`)
|
|
|
|
func DetectSyntax(r io.Reader) (string, string, bool) {
|
|
directives := ParseDirectives(r)
|
|
if len(directives) == 0 {
|
|
return "", "", false
|
|
}
|
|
v, ok := directives[keySyntax]
|
|
if !ok {
|
|
return "", "", false
|
|
}
|
|
p := strings.SplitN(v, " ", 2)
|
|
return p[0], v, true
|
|
}
|
|
|
|
func ParseDirectives(r io.Reader) map[string]string {
|
|
m := map[string]string{}
|
|
s := bufio.NewScanner(r)
|
|
for s.Scan() {
|
|
match := reDirective.FindStringSubmatch(s.Text())
|
|
if len(match) == 0 {
|
|
return m
|
|
}
|
|
m[strings.ToLower(match[1])] = match[2]
|
|
}
|
|
return m
|
|
}
|