func (g *OvenCleaner) removeRecursively(log lager.Logger, cake layercake.Cake, id layercake.ID) error { log = log.Session("remove-recursively", lager.Data{"id": id}) log.Debug("start") defer log.Debug("finished") if g.retainCheck.Check(id) { log.Debug("layer-is-held") return nil } img, err := cake.Get(id) if err != nil { log.Error("get-image-failed", err) return nil } if img.Container != "" { log.Debug("image-is-container", lager.Data{"id": id, "container": img.Container}) return nil } if err := cake.Remove(id); err != nil { log.Error("remove-image-failed", err) return err } if img.Parent == "" { log.Debug("stop-image-has-no-parent") return nil } if leaf, err := cake.IsLeaf(layercake.DockerImageID(img.Parent)); err == nil && leaf { log.Debug("has-parent-leaf", lager.Data{"parent-id": img.Parent}) return g.removeRecursively(log, cake, layercake.DockerImageID(img.Parent)) } return nil }