autogits/workflow-pr/submodules.go

54 lines
961 B
Go
Raw Normal View History

2025-02-02 21:07:51 +01:00
package main
import (
"errors"
"io"
"text/scanner"
)
type Submodule struct {
Name string
Path string
}
var SyntaxError error = errors.New("Syntax error")
func (sub *Submodule) parseSubmoduleName(s *scanner.Scanner) error {
s.Scan()
if s.TokenText() != "submodule" {
return SyntaxError
}
s.Scan()
sub.Name = s.TokenText()
l := len(sub.Name)
if sub.Name[0] != '"' || sub.Name[l-1] != '"' || s.ErrorCount > 0 {
return SyntaxError
}
sub.Name = sub.Name[1 : len(sub.Name)-1]
s.Scan()
if s.TokenText() != "]" {
return SyntaxError
}
return nil
}
func ParseSubmodulesFile(reader io.Reader) ([]Submodule, error) {
ret := make([]Submodule, 0, 100)
s := new(scanner.Scanner)
s.Init(reader)
sub := &Submodule{}
for tok := s.Scan(); tok != scanner.EOF; tok = s.Scan() {
t := s.TokenText()
if t == "[" {
if err := sub.parseSubmoduleName(s); err != nil {
return nil, err
}
}
ret = append(ret, *sub)
}
return ret, nil
}