private void AddAnyNewPeopleToSettings(IEnumerable<BuildStatus> changedBuildStatuses)
{
var buildStatusesWithNewPeople = from buildStatus in changedBuildStatuses
join setting in _settings.CiEntryPointSettings.SelectMany(i => i.BuildDefinitionSettings) on buildStatus.BuildDefinitionId equals setting.Id
where !setting.ContainsPerson(buildStatus)
&& !string.IsNullOrEmpty(buildStatus.RequestedBy)
select new { buildStatus, setting };
var buildStatusesWithNewPeopleList = buildStatusesWithNewPeople
.GroupBy(i => i.buildStatus.RequestedBy)
.Select(i => i.First())
.ToList();
if (!buildStatusesWithNewPeopleList.Any()) return;
var allExistingPeople = _settings.CiEntryPointSettings
.SelectMany(eps => eps.BuildDefinitionSettings)
.SelectMany(bds => bds.People)
.Distinct().ToList();
var newPeople = buildStatusesWithNewPeopleList
.Select(s => s.buildStatus.RequestedBy)
.Where(p => allExistingPeople.All(p1 => p1 != p)).ToList();
buildStatusesWithNewPeopleList
.ForEach(bss => bss.setting.People.Add(bss.buildStatus.RequestedBy));
_settings.Save();
newPeople.ForEach(InvokeNewUser);
}