@@ -6,10 +6,7 @@ package cache
6
6
7
7
import (
8
8
"context"
9
- "encoding/json"
10
9
"fmt"
11
- "io"
12
- "os"
13
10
"path/filepath"
14
11
"regexp"
15
12
"strings"
@@ -220,123 +217,6 @@ func (s *snapshot) ModWhy(ctx context.Context, fh source.FileHandle) (map[string
220
217
return mwh .why (ctx , s )
221
218
}
222
219
223
- type modUpgradeHandle struct {
224
- handle * memoize.Handle
225
- }
226
-
227
- type modUpgradeData struct {
228
- // upgrades maps modules to their latest versions.
229
- upgrades map [string ]string
230
-
231
- err error
232
- }
233
-
234
- func (muh * modUpgradeHandle ) upgrades (ctx context.Context , snapshot * snapshot ) (map [string ]string , error ) {
235
- v , err := muh .handle .Get (ctx , snapshot .generation , snapshot )
236
- if v == nil {
237
- return nil , err
238
- }
239
- data := v .(* modUpgradeData )
240
- return data .upgrades , data .err
241
- }
242
-
243
- // moduleUpgrade describes a module that can be upgraded to a particular
244
- // version.
245
- type moduleUpgrade struct {
246
- Path string
247
- Update struct {
248
- Version string
249
- }
250
- }
251
-
252
- func (s * snapshot ) ModUpgrade (ctx context.Context , fh source.FileHandle ) (map [string ]string , error ) {
253
- if fh .Kind () != source .Mod {
254
- return nil , fmt .Errorf ("%s is not a go.mod file" , fh .URI ())
255
- }
256
- if handle := s .getModUpgradeHandle (fh .URI ()); handle != nil {
257
- return handle .upgrades (ctx , s )
258
- }
259
- key := modKey {
260
- sessionID : s .view .session .id ,
261
- env : hashEnv (s ),
262
- mod : fh .FileIdentity (),
263
- view : s .view .rootURI .Filename (),
264
- verb : upgrade ,
265
- }
266
- h := s .generation .Bind (key , func (ctx context.Context , arg memoize.Arg ) interface {} {
267
- ctx , done := event .Start (ctx , "cache.ModUpgradeHandle" , tag .URI .Of (fh .URI ()))
268
- defer done ()
269
-
270
- snapshot := arg .(* snapshot )
271
-
272
- pm , err := snapshot .ParseMod (ctx , fh )
273
- if err != nil {
274
- return & modUpgradeData {err : err }
275
- }
276
-
277
- // No requires to upgrade.
278
- if len (pm .File .Require ) == 0 {
279
- return & modUpgradeData {}
280
- }
281
- // Run "go list -mod readonly -u -m all" to be able to see which deps can be
282
- // upgraded without modifying mod file.
283
- inv := & gocommand.Invocation {
284
- Verb : "list" ,
285
- Args : []string {"-u" , "-m" , "-json" , "all" },
286
- WorkingDir : filepath .Dir (fh .URI ().Filename ()),
287
- }
288
- if s .workspaceMode ()& tempModfile == 0 || containsVendor (fh .URI ()) {
289
- // Use -mod=readonly if the module contains a vendor directory
290
- // (see golang/go#38711).
291
- inv .ModFlag = "readonly"
292
- }
293
- stdout , err := snapshot .RunGoCommandDirect (ctx , source .Normal | source .AllowNetwork , inv )
294
- if err != nil {
295
- return & modUpgradeData {err : err }
296
- }
297
- var upgradeList []moduleUpgrade
298
- dec := json .NewDecoder (stdout )
299
- for {
300
- var m moduleUpgrade
301
- if err := dec .Decode (& m ); err == io .EOF {
302
- break
303
- } else if err != nil {
304
- return & modUpgradeData {err : err }
305
- }
306
- upgradeList = append (upgradeList , m )
307
- }
308
- if len (upgradeList ) <= 1 {
309
- return & modUpgradeData {}
310
- }
311
- upgrades := make (map [string ]string )
312
- for _ , upgrade := range upgradeList [1 :] {
313
- if upgrade .Update .Version == "" {
314
- continue
315
- }
316
- upgrades [upgrade .Path ] = upgrade .Update .Version
317
- }
318
- return & modUpgradeData {
319
- upgrades : upgrades ,
320
- }
321
- }, nil )
322
- muh := & modUpgradeHandle {handle : h }
323
- s .mu .Lock ()
324
- s .modUpgradeHandles [fh .URI ()] = muh
325
- s .mu .Unlock ()
326
-
327
- return muh .upgrades (ctx , s )
328
- }
329
-
330
- // containsVendor reports whether the module has a vendor folder.
331
- func containsVendor (modURI span.URI ) bool {
332
- dir := filepath .Dir (modURI .Filename ())
333
- f , err := os .Stat (filepath .Join (dir , "vendor" ))
334
- if err != nil {
335
- return false
336
- }
337
- return f .IsDir ()
338
- }
339
-
340
220
var moduleAtVersionRe = regexp .MustCompile (`^(?P<module>.*)@(?P<version>.*)$` )
341
221
342
222
// extractGoCommandError tries to parse errors that come from the go command
0 commit comments