This is primarily useful for the Hydra provisioner, which can write its machines to another file than /etc/nix/machines.
O3NM62IZE5EMW4KY56TV53BUZZL2NHAC55W7NBPTD7A4CKT4CHUQC YVCZP2ZMFIXPLAQN2BGEBVK7SPQFALXABDAKM53O2NAIKZ2J4QRQC OG3Z3QGCG2FNDGF4VQYWOXLZCF7LGTZCUMGKUCBNAPAQ5FRFHQ2AC SODOV2CMWA4JMIKRQNJ6MD3U3BS2XTSLINLRAG4SFY742IIJNI5QC 24BMQDZAWDQ7VNIA7TIROXSOYLOJBNZ2E4264WHWNJAEN6ZB3UOAC SK6WHODMWAUL7LNH6QTUXZW7GQFNKKDYN4BU45ODTMMKYMG6O7KAC 5AIYUMTBY6TFQTBRP3MJ2PYWUMRF57I77NIVWYE74UMEVQMBWZVQC YZAI5GQU3HNMK5MEGF2Y7WS445AN4YKD3HNJQVQP545ODN3F5DLAC NJJ7H64SZOX5EGACDCQAUQ7R6UEWD5IIC35A2MWFOOJV55DJYPHAC FQQRJUO4C7655SFAKPRPILALVEVRQSIIVBLMQUFPODUBXPIMWYSAC PLOZBRTR6USSGJX7GR2RZKNPVYG2Q6QM7LW6IA35MKL63ZTQVD7QC HJOEIMLRDVQ2KZI5HGL2HKGBM3AHP7YIKGKDAGFUNKRUXVRB24NAC HTL6HIBMRGSX2H2H7KB4MC3H6UQ5C752VC3UHC43SRA7V66PQCRQC 2GK5DOU7ODF4WBSN3QTD3WIO52VTL2LOAXKGCDEMMAQPTEO4A4HAC string contents;if (pathExists(machinesFile)) {struct stat st;if (stat(machinesFile.c_str(), &st) != 0)throw SysError(format("getting stats about ‘%1%’") % machinesFile);if (st.st_ino == machinesFileStat.st_ino && st.st_mtime == machinesFileStat.st_mtime)return;printMsg(lvlDebug, "reloading machines");contents = readFile(machinesFile);machinesFileStat = st;} else {contents = "localhost " + concatStringsSep(",", localPlatforms)+ " - " + int2String(settings.maxBuildJobs) + " 1";}
string defaultMachinesFile = "/etc/nix/machines";auto machinesFiles = tokenizeString<std::vector<Path>>(getEnv("NIX_REMOTE_SYSTEMS", pathExists(defaultMachinesFile) ? defaultMachinesFile : ""), ":");if (machinesFiles.empty()) {parseMachines("localhost " + concatStringsSep(",", localPlatforms)+ " - " + int2String(settings.maxBuildJobs) + " 1");return;}std::vector<struct stat> fileStats;fileStats.resize(machinesFiles.size());for (unsigned int n = 0; n < machinesFiles.size(); ++n) {auto & st(fileStats[n]);st.st_ino = st.st_mtime = 0;}auto readMachinesFiles = [&]() {/* Check if any of the machines files changed. */bool anyChanged = false;for (unsigned int n = 0; n < machinesFiles.size(); ++n) {Path machinesFile = machinesFiles[n];struct stat st;if (stat(machinesFile.c_str(), &st) != 0) {if (errno != ENOENT)throw SysError(format("getting stats about ‘%1%’") % machinesFile);st.st_ino = st.st_mtime = 0;}auto & old(fileStats[n]);if (old.st_ino != st.st_ino || old.st_mtime != st.st_mtime)anyChanged = true;old = st;}if (!anyChanged) return;debug("reloading machines files");string contents;for (auto & machinesFile : machinesFiles) {try {contents += readFile(machinesFile);contents += '\n';} catch (SysError & e) {if (e.errNo != ENOENT) throw;}}parseMachines(contents);};