Skip to content

Commit 5a6f0ee

Browse files
committed
refactor: deduplicate package fetching logic
Signed-off-by: Gareth Jones <[email protected]>
1 parent d7ffed9 commit 5a6f0ee

File tree

1 file changed

+16
-23
lines changed

1 file changed

+16
-23
lines changed

tools/osv-linter/internal/pkgchecker/version_check.go

Lines changed: 16 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@ import (
1515
"golang.org/x/mod/semver"
1616
)
1717

18+
func fetchPackageData(packageInstanceURL string) ([]byte, error) {
19+
resp, err := faulttolerant.Get(packageInstanceURL)
20+
if err != nil {
21+
return nil, fmt.Errorf("unable to validate package: %v", err)
22+
}
23+
defer resp.Body.Close()
24+
if resp.StatusCode != http.StatusOK {
25+
return nil, fmt.Errorf("unable to validate package: %q for %s", resp.Status, packageInstanceURL)
26+
}
27+
28+
return io.ReadAll(resp.Body)
29+
}
30+
1831
// Confirm that all specified versions of a package exist in a registry
1932
func versionsExistInGeneric(
2033
pkg string,
@@ -23,20 +36,11 @@ func versionsExistInGeneric(
2336
packageInstanceURL string,
2437
versionsPath string,
2538
) error {
26-
resp, err := faulttolerant.Get(packageInstanceURL)
27-
if err != nil {
28-
return fmt.Errorf("unable to validate package: %v", err)
29-
}
30-
defer resp.Body.Close()
31-
if resp.StatusCode != http.StatusOK {
32-
return fmt.Errorf("unable to validate package: %q for %s", resp.Status, packageInstanceURL)
33-
}
34-
35-
// Parse the known versions from the JSON.
36-
respJSON, err := io.ReadAll(resp.Body)
39+
respJSON, err := fetchPackageData(packageInstanceURL)
3740
if err != nil {
3841
return fmt.Errorf("unable to retrieve JSON for %q: %v", pkg, err)
3942
}
43+
4044
// Fetch all known versions of package.
4145
versionsInRepository := []string{}
4246
for _, result := range gjson.GetBytes(respJSON, versionsPath).Array() {
@@ -96,18 +100,7 @@ func versionsExistInGo(pkg string, versions []string) error {
96100

97101
packageInstanceURL := fmt.Sprintf("%s/%s/@v/list", EcosystemBaseURLs["Go"], pkg)
98102

99-
// This 404's for non-existent packages.
100-
resp, err := faulttolerant.Get(packageInstanceURL)
101-
if err != nil {
102-
return fmt.Errorf("unable to validate package: %v", err)
103-
}
104-
defer resp.Body.Close()
105-
if resp.StatusCode != http.StatusOK {
106-
return fmt.Errorf("unable to validate package: %q for %s", resp.Status, packageInstanceURL)
107-
}
108-
109-
// Load the known versions from the list provided.
110-
respBytes, err := io.ReadAll(resp.Body)
103+
respBytes, err := fetchPackageData(packageInstanceURL)
111104
if err != nil {
112105
return fmt.Errorf("unable to retrieve versions for for %q: %v", pkg, err)
113106
}

0 commit comments

Comments
 (0)