func (d *Deployer) loop(w *state.UnitsWatcher) error { deployed, err := d.mgr.DeployedUnits() if err != nil { return err } for _, unitName := range deployed { d.deployed[unitName] = true if err := d.changed(unitName); err != nil { return err } } for { select { case <-d.tomb.Dying(): return tomb.ErrDying case changes, ok := <-w.Changes(): if !ok { return watcher.MustErr(w) } for _, unitName := range changes { if err := d.changed(unitName); err != nil { return err } } } } panic("unreachable") }