in make-util.js [777:823]
var linkAggregatedLayoutContent = function (sourceRoot, destRoot, release, commit) {
assert(sourceRoot, 'sourceRoot');
assert(destRoot, 'destRoot');
assert(commit, 'commit');
console.log();
console.log(`> Linking ${path.basename(sourceRoot)}`);
mkdir('-p', destRoot);
// process each file/folder within the source root
fs.readdirSync(sourceRoot).forEach(function (itemName) {
// skip files
var taskSourcePath = path.join(sourceRoot, itemName);
if (!fs.statSync(taskSourcePath).isDirectory()) {
return;
}
// load the source task.json
var sourceTask = JSON.parse(fs.readFileSync(path.join(taskSourcePath, 'task.json')));
if (typeof sourceTask.version.Major != 'number' ||
typeof sourceTask.version.Minor != 'number' ||
typeof sourceTask.version.Patch != 'number') {
fail(`Expected task.version.Major/Minor/Patch to be numbers (${taskSourcePath})`);
}
// determine the dest folder based on the major version
var taskDestPath = path.join(destRoot, itemName + `__v${sourceTask.version.Major}`);
if (test('-e', taskDestPath)) {
// validate that a newer minor+patch does not exist in an older release
// (newer releases should be linked first)
var destTask = JSON.parse(fs.readFileSync(path.join(taskDestPath, 'task.json')));
var sourceVersion = `${sourceTask.version.Major}.${sourceTask.version.Minor}.${sourceTask.version.Patch}`;
var destVersion = `${destTask.version.Major}.${destTask.version.Minor}.${destTask.version.Patch}`;
if (semver.gt(sourceVersion, destVersion)) {
fail(`Expected minor+patch version for task already in the aggregate layout, to be greater or equal than non-aggregated layout being merged. Source task: ${taskSourcePath}`);
}
}
else {
// create a junction point
fs.symlinkSync(taskSourcePath, taskDestPath, 'junction');
// write a human-friendly metadata file
fs.writeFileSync(taskDestPath + (release ? `_m${release}` : '') + `_${commit}`, '');
}
});
}