text: var Promise = require("nodegit-promise");
  var cp = require("child_process");
  var path = require("path");
  
  var local = path.join.bind(path, __dirname);
  
  var check = require(local("checkPrepared")).checkGenerated;
  var retrieve = require(local("retrieveExternalDependencies"));
  var generate = require(local("../generate"));
  
  module.exports = function prepareForBuild() {
  
    return new Promise(function(resolve, reject) {
      cp.exec("npm install --ignore-scripts", function(err, stdout, stderr) {
        if (err) {
          console.error(stderr);
          reject(err, stderr);
        }
        else {
          resolve();
          console.info(stdout);
        }
      });
    }).then(function() {
      return Promise.all([
        retrieve(),
        doGenerate()
      ]);
    });
  };
  
  function doGenerate() {
    console.info("[nodegit] Detecting generated code.");
    return check().then(function(allThere) {
      if (allThere) {
        console.info("[nodegit] Generated code is intact.");
        return Promise.resolve();
      }
      else {
        console.info("[nodegit] Generated code is missing or incomplete, " +
          "regenerating now.");
  
        return new Promise(function(resolve, reject) {
          try {
            generate();
            console.info("[nodegit] Code regenerated.");
            resolve();
          }
          catch (e) {
            console.info("[nodegit] Error generating code.");
            console.info(e);
            //console.info(stderr);
            reject(e);
          }
        });
      }
    });
  }
  // Called on the command line
  if (require.main === module) {
    module.exports();
  }
  