@ -156,14 +156,13 @@ func (m *Manager) Update() error {
return err
return err
}
}
// If the lock file hasn't changed, don't write a new one.
// Finally, we need to write the lockfile if the dependencies changed.
oldLock , err := chartutil . LoadRequirementsLock ( c )
if oldLock , err := chartutil . LoadRequirementsLock ( c ) ; err == nil {
if err == nil && oldLock . Digest == lock . Digest {
if changed , err := dependenciesChanged ( oldLock . Dependencies , lock . Dependencies ) ; err == nil && changed {
return nil
}
// Finally, we need to write the lockfile.
return writeLock ( m . ChartPath , lock )
return writeLock ( m . ChartPath , lock )
}
}
return nil
}
}
func ( m * Manager ) loadChartDir ( ) ( * chart . Chart , error ) {
func ( m * Manager ) loadChartDir ( ) ( * chart . Chart , error ) {
@ -591,6 +590,22 @@ func (m *Manager) loadChartRepositories() (map[string]*repo.ChartRepository, err
return indices , nil
return indices , nil
}
}
// dependenciesChanged compares the chksum of old and new dependencies and returns
// true or false if there's a difference
func dependenciesChanged ( oldDep , newDep [ ] * chartutil . Dependency ) ( bool , error ) {
newDigest , err := resolver . HashReq ( & chartutil . Requirements { Dependencies : newDep } )
if err != nil {
return false , err
}
oldDigest , err := resolver . HashReq ( & chartutil . Requirements { Dependencies : oldDep } )
if err != nil {
return false , err
}
return newDigest != oldDigest , nil
}
// writeLock writes a lockfile to disk
// writeLock writes a lockfile to disk
func writeLock ( chartpath string , lock * chartutil . RequirementsLock ) error {
func writeLock ( chartpath string , lock * chartutil . RequirementsLock ) error {
data , err := yaml . Marshal ( lock )
data , err := yaml . Marshal ( lock )