This is necessary because the required system type can become available later (e.g. by being provisioned by the auto-scaler). However, in the future, we may want to fail steps if they have been unsupported for more than a certain amount of time.
4CQWOODYIBUEMPSLWTXZPZZTQBYYRGCORKLY4SKG2WVCVXGT654QC buildStatus = step == r ? bsFailed : bsDepFailed;buildStepStatus = bssFailed;}if (buildStatus == bsSuccess) {bool supported = false;{auto machines_(machines.lock()); // FIXME: use shared_mutexfor (auto & m : *machines_)if (m.second->supportsStep(r)) { supported = true; break; }}if (!supported) {printMsg(lvlError, format("aborting unsupported build %1%") % build->id);buildStatus = bsUnsupported;buildStepStatus = bssUnsupported;}}if (buildStatus != bsSuccess) {time_t now = time(0);
("update Builds set finished = 1, busy = 0, buildStatus = $2, startTime = $3, stopTime = $3, isCachedBuild = $4 where id = $1 and finished = 0")
("update Builds set finished = 1, busy = 0, buildStatus = $2, startTime = $3, stopTime = $3, isCachedBuild = 1 where id = $1 and finished = 0")