@@ -93,37 +93,48 @@ func getPathVersions(ctx context.Context, db *DB, path string, versionTypes ...v
93
93
if err := db .db .RunQuery (ctx , query , collect , path ); err != nil {
94
94
return nil , err
95
95
}
96
+ if err := populateRawLatestInfo (ctx , db , versions ); err != nil {
97
+ return nil , err
98
+ }
99
+ return versions , nil
100
+ }
101
+
102
+ // versionTypeExpr returns a comma-separated list of version types,
103
+ // for use in a clause like "WHERE version_type IN (%s)"
104
+ func versionTypeExpr (vts []version.Type ) string {
105
+ var vs []string
106
+ for _ , vt := range vts {
107
+ vs = append (vs , fmt .Sprintf ("'%s'" , vt .String ()))
108
+ }
109
+ return strings .Join (vs , ", " )
110
+ }
111
+
112
+ func populateRawLatestInfo (ctx context.Context , db * DB , mis []* internal.ModuleInfo ) (err error ) {
113
+ defer derrors .WrapStack (& err , "populateRawLatestInfo(%d ModuleInfos)" , len (mis ))
114
+
96
115
if experiment .IsActive (ctx , internal .ExperimentRetractions ) {
97
116
start := time .Now ()
117
+ // Collect the RawLatestInfos for all modules in the list.
98
118
infos := map [string ]* internal.RawLatestInfo {}
99
- for _ , mi := range versions {
119
+ for _ , mi := range mis {
100
120
if _ , ok := infos [mi .ModulePath ]; ! ok {
101
121
info , err := db .GetRawLatestInfo (ctx , mi .ModulePath )
102
122
if err != nil {
103
- return nil , err
123
+ return err
104
124
}
105
125
infos [mi .ModulePath ] = info
106
126
}
107
127
}
108
- for _ , mi := range versions {
128
+ // Use the collected RawLatestInfos to populate the ModuleInfos.
129
+ for _ , mi := range mis {
109
130
info := infos [mi .ModulePath ]
110
131
if info != nil {
111
132
info .PopulateModuleInfo (mi )
112
133
}
113
134
}
114
- log .Debugf (ctx , "getPathVersions: raw latest info fetched and applied in %dms" , time .Since (start ).Milliseconds ())
135
+ log .Debugf (ctx , "raw latest info fetched and applied in %dms" , time .Since (start ).Milliseconds ())
115
136
}
116
- return versions , nil
117
- }
118
-
119
- // versionTypeExpr returns a comma-separated list of version types,
120
- // for use in a clause like "WHERE version_type IN (%s)"
121
- func versionTypeExpr (vts []version.Type ) string {
122
- var vs []string
123
- for _ , vt := range vts {
124
- vs = append (vs , fmt .Sprintf ("'%s'" , vt .String ()))
125
- }
126
- return strings .Join (vs , ", " )
137
+ return nil
127
138
}
128
139
129
140
// GetLatestInfo returns the latest information about the unit in the module.
0 commit comments