| 485 | } |
| 486 | |
| 487 | func (m *Manager) upgradeExtensions(exts []*Extension, force bool) error { |
| 488 | var longestExt = slices.MaxFunc(exts, func(a, b *Extension) int { |
| 489 | return len(a.Name()) - len(b.Name()) |
| 490 | }) |
| 491 | var longestExtName = len(longestExt.Name()) |
| 492 | |
| 493 | var failed bool |
| 494 | for _, f := range exts { |
| 495 | fmt.Fprintf(m.io.Out, "[%*s]: ", longestExtName, f.Name()) |
| 496 | currentVersion := displayExtensionVersion(f, f.CurrentVersion()) |
| 497 | err := m.upgradeExtension(f, force) |
| 498 | if err != nil { |
| 499 | if !errors.Is(err, localExtensionUpgradeError) && |
| 500 | !errors.Is(err, upToDateError) && |
| 501 | !errors.Is(err, pinnedExtensionUpgradeError) { |
| 502 | failed = true |
| 503 | } |
| 504 | fmt.Fprintf(m.io.Out, "%s\n", err) |
| 505 | continue |
| 506 | } |
| 507 | latestVersion := displayExtensionVersion(f, f.LatestVersion()) |
| 508 | if m.dryRunMode { |
| 509 | fmt.Fprintf(m.io.Out, "would have upgraded from %s to %s\n", currentVersion, latestVersion) |
| 510 | } else { |
| 511 | fmt.Fprintf(m.io.Out, "upgraded from %s to %s\n", currentVersion, latestVersion) |
| 512 | } |
| 513 | } |
| 514 | if failed { |
| 515 | return errors.New("some extensions failed to upgrade") |
| 516 | } |
| 517 | return nil |
| 518 | } |
| 519 | |
| 520 | func (m *Manager) upgradeExtension(ext *Extension, force bool) error { |
| 521 | if ext.IsLocal() { |