parseDefFile parses a SIF definition file from reader, and returns non-trivial contents of the %environment and %runscript sections.
(reader io.Reader)
| 20 | // parseDefFile parses a SIF definition file from reader, |
| 21 | // and returns non-trivial contents of the %environment and %runscript sections. |
| 22 | func parseDefFile(reader io.Reader) ([]string, []string, error) { |
| 23 | type parserState int |
| 24 | const ( |
| 25 | parsingOther parserState = iota |
| 26 | parsingEnvironment |
| 27 | parsingRunscript |
| 28 | ) |
| 29 | |
| 30 | environment := []string{} |
| 31 | runscript := []string{} |
| 32 | |
| 33 | state := parsingOther |
| 34 | scanner := bufio.NewScanner(reader) |
| 35 | for scanner.Scan() { |
| 36 | s := strings.TrimSpace(scanner.Text()) |
| 37 | switch { |
| 38 | case s == `%environment`: |
| 39 | state = parsingEnvironment |
| 40 | case s == `%runscript`: |
| 41 | state = parsingRunscript |
| 42 | case strings.HasPrefix(s, "%"): |
| 43 | state = parsingOther |
| 44 | case state == parsingEnvironment: |
| 45 | if s != "" && !strings.HasPrefix(s, "#") { |
| 46 | environment = append(environment, s) |
| 47 | } |
| 48 | case state == parsingRunscript: |
| 49 | runscript = append(runscript, s) |
| 50 | default: // parsingOther: ignore the line |
| 51 | } |
| 52 | } |
| 53 | if err := scanner.Err(); err != nil { |
| 54 | return nil, nil, fmt.Errorf("reading lines from SIF definition file object: %w", err) |
| 55 | } |
| 56 | return environment, runscript, nil |
| 57 | } |
| 58 | |
| 59 | // generateInjectedScript generates a shell script based on |
| 60 | // SIF definition file %environment and %runscript data, and returns it. |
no outgoing calls
searching dependent graphs…