Putting behind a flag

Signed-off-by: Vaibhav Sharma <17532va@gmail.com>
pull/11701/head
Vaibhav Sharma 3 years ago
parent eaec64aa92
commit 680f8de6e7

@ -64,6 +64,7 @@ func newDependencyBuildCmd(cfg *action.Configuration, out io.Writer) *cobra.Comm
RepositoryConfig: settings.RepositoryConfig, RepositoryConfig: settings.RepositoryConfig,
RepositoryCache: settings.RepositoryCache, RepositoryCache: settings.RepositoryCache,
Debug: settings.Debug, Debug: settings.Debug,
OptimizedUpdate: client.OptimizedUpdate,
} }
if client.Verify { if client.Verify {
man.Verify = downloader.VerifyIfPossible man.Verify = downloader.VerifyIfPossible
@ -80,6 +81,7 @@ func newDependencyBuildCmd(cfg *action.Configuration, out io.Writer) *cobra.Comm
f.BoolVar(&client.Verify, "verify", false, "verify the packages against signatures") f.BoolVar(&client.Verify, "verify", false, "verify the packages against signatures")
f.StringVar(&client.Keyring, "keyring", defaultKeyring(), "keyring containing public keys") f.StringVar(&client.Keyring, "keyring", defaultKeyring(), "keyring containing public keys")
f.BoolVar(&client.SkipRefresh, "skip-refresh", false, "do not refresh the local repository cache") f.BoolVar(&client.SkipRefresh, "skip-refresh", false, "do not refresh the local repository cache")
f.BoolVar(&client.OptimizedUpdate, "optimized-update", false, "Refresh only the repos in chart.yaml")
return cmd return cmd
} }

@ -67,6 +67,7 @@ func newDependencyUpdateCmd(cfg *action.Configuration, out io.Writer) *cobra.Com
RepositoryConfig: settings.RepositoryConfig, RepositoryConfig: settings.RepositoryConfig,
RepositoryCache: settings.RepositoryCache, RepositoryCache: settings.RepositoryCache,
Debug: settings.Debug, Debug: settings.Debug,
OptimizedUpdate: client.OptimizedUpdate,
} }
if client.Verify { if client.Verify {
man.Verify = downloader.VerifyAlways man.Verify = downloader.VerifyAlways
@ -79,6 +80,7 @@ func newDependencyUpdateCmd(cfg *action.Configuration, out io.Writer) *cobra.Com
f.BoolVar(&client.Verify, "verify", false, "verify the packages against signatures") f.BoolVar(&client.Verify, "verify", false, "verify the packages against signatures")
f.StringVar(&client.Keyring, "keyring", defaultKeyring(), "keyring containing public keys") f.StringVar(&client.Keyring, "keyring", defaultKeyring(), "keyring containing public keys")
f.BoolVar(&client.SkipRefresh, "skip-refresh", false, "do not refresh the local repository cache") f.BoolVar(&client.SkipRefresh, "skip-refresh", false, "do not refresh the local repository cache")
f.BoolVar(&client.OptimizedUpdate, "optimized-update", false, "Refresh only the repos in chart.yaml")
return cmd return cmd
} }

@ -38,6 +38,7 @@ type Dependency struct {
Keyring string Keyring string
SkipRefresh bool SkipRefresh bool
ColumnWidth uint ColumnWidth uint
OptimizedUpdate bool
} }
// NewDependency creates a new Dependency object with the given configuration. // NewDependency creates a new Dependency object with the given configuration.

@ -71,6 +71,8 @@ type Manager struct {
Keyring string Keyring string
// SkipUpdate indicates that the repository should not be updated first. // SkipUpdate indicates that the repository should not be updated first.
SkipUpdate bool SkipUpdate bool
// Update repos only in the chart.yaml
OptimizedUpdate bool
// Getter collection for the operation // Getter collection for the operation
Getters []getter.Provider Getters []getter.Provider
RegistryClient *registry.Client RegistryClient *registry.Client
@ -136,9 +138,16 @@ func (m *Manager) Build() error {
if !m.SkipUpdate { if !m.SkipUpdate {
// For each repo in the file, update the cached copy of that repo // For each repo in the file, update the cached copy of that repo
if err := m.UpdateRepositories(c); err != nil { if !m.OptimizedUpdate {
if err := m.UpdateRepositories(); err != nil {
return err return err
} }
} else {
if err := m.UpdateRepositoriesInChart(c); err != nil {
return err
}
}
} }
// Now we need to fetch every package here into charts/ // Now we need to fetch every package here into charts/
@ -185,11 +194,19 @@ func (m *Manager) Update() error {
// For each of the repositories Helm is configured to know about, update // For each of the repositories Helm is configured to know about, update
// the index information locally. // the index information locally.
if !m.SkipUpdate { if !m.SkipUpdate {
if err := m.UpdateRepositories(c); err != nil { // For each repo in the file, update the cached copy of that repo
if !m.OptimizedUpdate {
if err := m.UpdateRepositories(); err != nil {
return err
}
} else {
if err := m.UpdateRepositoriesInChart(c); err != nil {
return err return err
} }
} }
}
// Now we need to find out which version of a chart best satisfies the // Now we need to find out which version of a chart best satisfies the
// dependencies in the Chart.yaml // dependencies in the Chart.yaml
lock, err := m.resolve(req, repoNames) lock, err := m.resolve(req, repoNames)
@ -643,7 +660,20 @@ repository, use "https://charts.example.com/" or "@example" instead of
} }
// UpdateRepositories updates all of the local repos to the latest. // UpdateRepositories updates all of the local repos to the latest.
func (m *Manager) UpdateRepositories(c *chart.Chart) error { func (m *Manager) UpdateRepositories() error {
rf, err := loadRepoConfig(m.RepositoryConfig)
if err != nil {
return err
}
repos := rf.Repositories
if err := m.parallelRepoUpdate(repos); err != nil {
return err
}
return nil
}
// UpdateRepositories updates only the local repos in the chart.yaml to the latest.
func (m *Manager) UpdateRepositoriesInChart(c *chart.Chart) error {
rf, err := loadRepoConfig(m.RepositoryConfig) rf, err := loadRepoConfig(m.RepositoryConfig)
if err != nil { if err != nil {
return err return err
@ -660,18 +690,18 @@ func (m *Manager) UpdateRepositories(c *chart.Chart) error {
repos = append(repos, e) repos = append(repos, e)
} }
} }
if len(repos) > 0 {
fmt.Fprintln(m.Out, "Hang tight while we grab the latest from your chart repositories...")
// This prints warnings straight to out.
if err := m.parallelRepoUpdate(repos); err != nil { if err := m.parallelRepoUpdate(repos); err != nil {
return err return err
} }
fmt.Fprintln(m.Out, "Update Complete. ⎈Happy Helming!⎈")
}
return nil return nil
} }
func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error { func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error {
if len(repos) <= 0 {
return nil
}
fmt.Fprintln(m.Out, "Hang tight while we grab the latest from your chart repositories...")
// This prints warnings straight to out.
var wg sync.WaitGroup var wg sync.WaitGroup
for _, c := range repos { for _, c := range repos {
@ -703,6 +733,7 @@ func (m *Manager) parallelRepoUpdate(repos []*repo.Entry) error {
} }
wg.Wait() wg.Wait()
fmt.Fprintln(m.Out, "Update Complete. ⎈Happy Helming!⎈")
return nil return nil
} }

@ -618,6 +618,7 @@ func TestUpdateOnlyRequiredRepos(t *testing.T) {
Getters: g, Getters: g,
RepositoryConfig: dir("repositories.yaml"), RepositoryConfig: dir("repositories.yaml"),
RepositoryCache: dir(), RepositoryCache: dir(),
OptimizedUpdate: true,
} }
err = m.Update() err = m.Update()

Loading…
Cancel
Save