removeLeastRecent removes items from history until the length number of releases does not exceed max. We allow max to be set explicitly so that calling functions can "make space" for the new records they are going to write.
(name string, maximum int)
| 221 | // We allow max to be set explicitly so that calling functions can "make space" |
| 222 | // for the new records they are going to write. |
| 223 | func (s *Storage) removeLeastRecent(name string, maximum int) error { |
| 224 | if maximum < 0 { |
| 225 | return nil |
| 226 | } |
| 227 | h, err := s.History(name) |
| 228 | if err != nil { |
| 229 | return err |
| 230 | } |
| 231 | if len(h) <= maximum { |
| 232 | return nil |
| 233 | } |
| 234 | rls, err := releaseListToV1List(h) |
| 235 | if err != nil { |
| 236 | return err |
| 237 | } |
| 238 | |
| 239 | // We want oldest to newest |
| 240 | relutil.SortByRevision(rls) |
| 241 | |
| 242 | lastDeployed, err := s.Deployed(name) |
| 243 | if err != nil && !errors.Is(err, driver.ErrNoDeployedReleases) { |
| 244 | return err |
| 245 | } |
| 246 | |
| 247 | var toDelete []release.Releaser |
| 248 | for _, rel := range rls { |
| 249 | // once we have enough releases to delete to reach the maximum, stop |
| 250 | if len(rls)-len(toDelete) == maximum { |
| 251 | break |
| 252 | } |
| 253 | if lastDeployed != nil { |
| 254 | ldac, err := release.NewAccessor(lastDeployed) |
| 255 | if err != nil { |
| 256 | return err |
| 257 | } |
| 258 | if rel.Version != ldac.Version() { |
| 259 | toDelete = append(toDelete, rel) |
| 260 | } |
| 261 | } else { |
| 262 | toDelete = append(toDelete, rel) |
| 263 | } |
| 264 | } |
| 265 | |
| 266 | // Delete as many as possible. In the case of API throughput limitations, |
| 267 | // multiple invocations of this function will eventually delete them all. |
| 268 | errs := []error{} |
| 269 | for _, rel := range toDelete { |
| 270 | rac, err := release.NewAccessor(rel) |
| 271 | if err != nil { |
| 272 | errs = append(errs, err) |
| 273 | continue |
| 274 | } |
| 275 | err = s.deleteReleaseVersion(name, rac.Version()) |
| 276 | if err != nil { |
| 277 | errs = append(errs, err) |
| 278 | } |
| 279 | } |
| 280 |
no test coverage detected