(name string, force bool)
| 452 | var noExtensionsInstalledError = errors.New("no extensions installed") |
| 453 | |
| 454 | func (m *Manager) Upgrade(name string, force bool) error { |
| 455 | // Fetch metadata during list only when upgrading all extensions. |
| 456 | // This is a performance improvement so that we don't make a |
| 457 | // bunch of unnecessary network requests when trying to upgrade a single extension. |
| 458 | fetchMetadata := name == "" |
| 459 | exts, _ := m.list(fetchMetadata) |
| 460 | if len(exts) == 0 { |
| 461 | return noExtensionsInstalledError |
| 462 | } |
| 463 | if name == "" { |
| 464 | return m.upgradeExtensions(exts, force) |
| 465 | } |
| 466 | for _, f := range exts { |
| 467 | if f.Name() != name { |
| 468 | continue |
| 469 | } |
| 470 | if f.IsLocal() { |
| 471 | return localExtensionUpgradeError |
| 472 | } |
| 473 | // For single extensions manually retrieve latest version since we forgo doing it during list. |
| 474 | if latestVersion := f.LatestVersion(); latestVersion == "" { |
| 475 | return fmt.Errorf("unable to retrieve latest version for extension %q", name) |
| 476 | } |
| 477 | return m.upgradeExtensions([]*Extension{f}, force) |
| 478 | } |
| 479 | return fmt.Errorf("no extension matched %q", name) |
| 480 | } |
| 481 | |
| 482 | func (m *Manager) upgradeExtensions(exts []*Extension, force bool) error { |
| 483 | var longestExt = slices.MaxFunc(exts, func(a, b *Extension) int { |
nothing calls this directly
no test coverage detected