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