func()

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)
}