MCPcopy Create free account
hub / github.com/containerd/release-tool / parseGoModDependencies

Function parseGoModDependencies

util.go:125–181  ·  view source on GitHub ↗
(r io.Reader)

Source from the content-addressed store, hash-verified

123}
124
125func parseGoModDependencies(r io.Reader) ([]dependency, error) {
126 var err error
127
128 contents, err := io.ReadAll(r)
129 if err != nil {
130 return nil, err
131 }
132
133 goMod, err := modfile.ParseLax("go.mod", contents, nil)
134 if err != nil {
135 return nil, err
136 }
137
138 depMap := make(map[string]*dependency)
139 replaceMap := make(map[string]*dependency)
140
141 for _, require := range goMod.Require {
142 commitOrVersion, isSha := getCommitOrVersion(require.Mod.Version)
143 if commitOrVersion == "" {
144 return nil, fmt.Errorf("%w: poorly formatted version in require section %s", errUnknownFormat, require.Mod)
145 }
146
147 dep := formatDependency(require.Mod.Path, commitOrVersion, isSha)
148 depMap[dep.Name] = &dep
149 }
150
151 for _, replace := range goMod.Replace {
152 if strings.HasPrefix(replace.New.Path, "./") {
153 continue
154 }
155
156 commitOrVersion, isSha := getCommitOrVersion(replace.New.Version)
157 if commitOrVersion == "" {
158 return nil, fmt.Errorf("%w: poorly formatted version in replace section %s", errUnknownFormat, replace.New)
159 }
160
161 dep := formatDependency(replace.New.Path, commitOrVersion, isSha)
162 replaceMap[dep.Name] = &dep
163 }
164
165 for depName, dep := range replaceMap {
166 if oldDep, ok := depMap[depName]; ok {
167 oldDep.Ref = dep.Ref
168 oldDep.Sha = dep.Sha
169 oldDep.GitURL = dep.GitURL
170 } else {
171 logrus.Debugf("dependency %s found in replace section, but doesn't exist in requires section. Skipping", depName)
172 continue
173 }
174 }
175 var deps []dependency
176 for _, dep := range depMap {
177 deps = append(deps, *dep)
178 }
179
180 return deps, nil
181}
182

Callers 1

parseDependenciesFunction · 0.85

Calls 2

getCommitOrVersionFunction · 0.85
formatDependencyFunction · 0.85

Tested by

no test coverage detected