in groups/service.go [367:412]
func (as *adminService) RemoveMembersFromGroup(group GoogleGroup, members []string) error {
if *verbose {
log.Printf("adminService.RemoveMembersFromGroup %s %v", group.EmailId, members)
}
l, err := as.client.ListMembers(group.EmailId)
if err != nil {
if as.checkForAPIErr404(err) {
log.Printf("skipping removing members group %q as group has not yet been created\n", group.EmailId)
return nil
}
return fmt.Errorf("unable to retrieve members in group %q: %w", group.EmailId, err)
}
// aggregate the errors that occured and return them together in the end.
var errs []error
for _, m := range l {
found := false
for _, m2 := range members {
if EmailAddressEquals(m2, m.Email) {
found = true
break
}
}
if found {
continue
}
// a person was deleted from a group, let's remove them
if config.ConfirmChanges {
log.Printf("Removing %s from %q as a %s\n", m.Email, group.EmailId, m.Role)
err := as.client.DeleteMember(group.EmailId, m.Id)
if err != nil {
logErr := fmt.Errorf("unable to remove %s from %q as a %s: %w", m.Email, group.EmailId, m.Role, err)
log.Printf("%s\n", logErr)
errs = append(errs, logErr)
continue
}
log.Printf("Removed %s from %q as a %s\n", m.Email, group.EmailId, m.Role)
} else {
log.Printf("dry-run: would remove %s from %q as a %s\n", m.Email, group.EmailId, m.Role)
}
}
return utilerrors.NewAggregate(errs)
}