func()

in groups/service.go [209:264]


func (as *adminService) CreateOrUpdateGroupIfNescessary(group GoogleGroup) error {
	if *verbose {
		log.Printf("adminService.CreateOrUpdateGroupIfNecessary %s", group.EmailId)
	}

	grp, err := as.client.GetGroup(group.EmailId)
	if err != nil {
		if as.checkForAPIErr404(err) {
			if !config.ConfirmChanges {
				log.Printf("dry-run: would create group %q\n", group.EmailId)
			} else {
				log.Printf("Trying to create group: %q\n", group.EmailId)
				g := admin.Group{
					Email: group.EmailId,
				}
				if group.Name != "" {
					g.Name = group.Name
				}
				if group.Description != "" {
					g.Description = group.Description
				}
				g4, err := as.client.InsertGroup(&g)
				if err != nil {
					return fmt.Errorf("unable to add new group %q: %w", group.EmailId, err)
				}
				log.Printf("> Successfully created group %s\n", g4.Email)
			}
		} else {
			return fmt.Errorf("unable to fetch group %q: %w", group.EmailId, err)
		}
	} else {
		if group.Name != "" && grp.Name != group.Name ||
			group.Description != "" && grp.Description != group.Description {
			if !config.ConfirmChanges {
				log.Printf("dry-run: would update group name/description %q\n", group.EmailId)
			} else {
				log.Printf("Trying to update group: %q\n", group.EmailId)
				g := admin.Group{
					Email: group.EmailId,
				}
				if group.Name != "" {
					g.Name = group.Name
				}
				if group.Description != "" {
					g.Description = group.Description
				}
				g4, err := as.client.UpdateGroup(group.EmailId, &g)
				if err != nil {
					return fmt.Errorf("unable to update group %q: %w", group.EmailId, err)
				}
				log.Printf("> Successfully updated group %s\n", g4.Email)
			}
		}
	}
	return nil
}