@@ -15,6 +15,19 @@ import (
15
15
"golang.org/x/mod/semver"
16
16
)
17
17
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
+
18
31
// Confirm that all specified versions of a package exist in a registry
19
32
func versionsExistInGeneric (
20
33
pkg string ,
@@ -23,20 +36,11 @@ func versionsExistInGeneric(
23
36
packageInstanceURL string ,
24
37
versionsPath string ,
25
38
) 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 )
37
40
if err != nil {
38
41
return fmt .Errorf ("unable to retrieve JSON for %q: %v" , pkg , err )
39
42
}
43
+
40
44
// Fetch all known versions of package.
41
45
versionsInRepository := []string {}
42
46
for _ , result := range gjson .GetBytes (respJSON , versionsPath ).Array () {
@@ -96,18 +100,7 @@ func versionsExistInGo(pkg string, versions []string) error {
96
100
97
101
packageInstanceURL := fmt .Sprintf ("%s/%s/@v/list" , EcosystemBaseURLs ["Go" ], pkg )
98
102
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 )
111
104
if err != nil {
112
105
return fmt .Errorf ("unable to retrieve versions for for %q: %v" , pkg , err )
113
106
}
0 commit comments