(r io.Reader)
| 123 | } |
| 124 | |
| 125 | func 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 |
no test coverage detected