One more logic error: In Fire(), if the time is past the NextBuild time, the next integration time has to be advanced even if the subprojects did not change:
DateTime now = dtProvider.Now;
if (now > NextBuild && IsValidWeekDay(now.DayOfWeek))
{
if (SubProjectsAreChanged())
{
triggered = true;
return new IntegrationRequest(BuildCondition, Name, null);
}
// Note: Called in IntegrationComplete() if we triggered a build
above.
SetNextIntegrationDateTime();
}
