UNPKG

@readme/nodegit

Version:

Node.js libgit2 asynchronous native bindings

85 lines (74 loc) 2.61 kB
var path = require("path"); var rootDir = path.join(__dirname, "../.."); var gitExecutableLocation = require( path.join(rootDir, "./utils/gitExecutableLocation"), ); var submoduleStatus = require("./getStatus"); var exec = require(path.join(rootDir, "./utils/execPromise")); module.exports = function submodules() { return gitExecutableLocation() .catch(function () { console.error( "[nodegit] ERROR - Compilation of NodeGit requires git " + "CLI to be installed and on the path", ); throw new Error("git CLI is not installed or not on the path"); }) .then(function () { console.log("[nodegit] Checking submodule status"); return submoduleStatus(); }) .then(function (statuses) { console.log("[readme] submodule status: ", statuses); function printSubmodule(submoduleName) { console.log("\t" + submoduleName); } var dirtySubmodules = statuses .filter(function (status) { return status.workDirDirty && !status.needsInitialization; }) .map(function (dirtySubmodule) { return dirtySubmodule.name; }); if (dirtySubmodules.length) { console.error( "[nodegit] ERROR - Some submodules have uncommited changes:", ); dirtySubmodules.forEach(printSubmodule); console.error( "\nThey must either be committed or discarded before we build", ); throw new Error("Dirty Submodules: " + dirtySubmodules.join(" ")); } var outOfSyncSubmodules = statuses .filter(function (status) { return status.onNewCommit && !status.needsInitialization; }) .map(function (outOfSyncSubmodule) { return outOfSyncSubmodule.name; }); if (outOfSyncSubmodules.length) { console.warn( "[nodegit] WARNING - Some submodules are pointing to an new commit:", ); outOfSyncSubmodules.forEach(printSubmodule); console.warn("\nThey will not be updated."); } return statuses .filter(function (status) { return !status.onNewCommit; }) .reduce(function (chainPromise, submoduleToUpdate) { return chainPromise.then(function () { console.log( "[nodegit] Initializing submodule", submoduleToUpdate.name, ); return exec( "git submodule update --init --recursive " + submoduleToUpdate.name, ); }); }, Promise.resolve()); }); };