...
1
15
16 package golang
17
18 import (
19 "bytes"
20 "fmt"
21 "os"
22 "path/filepath"
23 "strings"
24
25 "github.com/bazelbuild/bazel-gazelle/language"
26 )
27
28 func importReposFromModules(args language.ImportReposArgs) language.ImportReposResult {
29
30 data, err := goListModules(filepath.Dir(args.Path))
31 if err != nil {
32 return language.ImportReposResult{Error: processGoListError(err, data)}
33 }
34
35 pathToModule, err := extractModules(data)
36 if err != nil {
37 return language.ImportReposResult{Error: err}
38 }
39
40
41 goSumPath := filepath.Join(filepath.Dir(args.Path), "go.sum")
42 data, _ = os.ReadFile(goSumPath)
43 lines := bytes.Split(data, []byte("\n"))
44 for _, line := range lines {
45 line = bytes.TrimSpace(line)
46 fields := bytes.Fields(line)
47 if len(fields) != 3 {
48 continue
49 }
50 path, version, sum := string(fields[0]), string(fields[1]), string(fields[2])
51 if strings.HasSuffix(version, "/go.mod") {
52 continue
53 }
54 if mod, ok := pathToModule[path+"@"+version]; ok {
55 mod.Sum = sum
56 }
57 }
58
59 pathToModule, err = fillMissingSums(pathToModule)
60 if err != nil {
61 return language.ImportReposResult{Error: fmt.Errorf("finding module sums: %v", err)}
62 }
63
64 return language.ImportReposResult{Gen: toRepositoryRules(pathToModule)}
65 }
66
View as plain text