Code coverage report for src/commitizen/init.js

Statements: 92.31% (60 / 65)      Branches: 92.31% (36 / 39)      Functions: 100% (5 / 5)      Lines: 90.91% (50 / 55)      Ignored: 7 statements, 6 branches     

All files » src/commitizen/ » init.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157    1         2       1   1   1   1   1   1   1   1   1 1 1 1   1                                     1                   1 13   13 13 13 13 13 13 13 13     13     13     13     13     13     13           2           1     1 1 1                     11   11 11                     1 13     13     13                 1 13 13 2   11     1  
'use strict';
 
Object.defineProperty(exports, '__esModule', {
  value: true
});
// istanbul ignore next
 
function _interopRequireWildcard(obj) { Eif (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
 
// istanbul ignore next
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
var _path = require('path');
 
var _path2 = _interopRequireDefault(_path);
 
var _configLoader = require('./configLoader');
 
var configLoader = _interopRequireWildcard(_configLoader);
 
var _commonUtil = require('../common/util');
 
var _adapter = require('./adapter');
 
var adapter = _interopRequireWildcard(_adapter);
 
var addPathToAdapterConfig = adapter.addPathToAdapterConfig;
var generateNpmInstallAdapterCommand = adapter.generateNpmInstallAdapterCommand;
var getNpmInstallStringMappings = adapter.getNpmInstallStringMappings;
exports['default'] = init;
 
var CLI_PATH = _path2['default'].normalize(__dirname + '/../../');
 
/**
 * CZ INIT
 * 
 * Init is generally responsible for initializing an adapter in
 * a user's project. The goal is to be able to run 
 * `commitizen init` and be prompted for certain fields which
 * will help you install the proper adapter for your project.
 * 
 * Init does not actually create the adapter (it defers to adapter
 * for this). Instead, it is specifically designed to help gather
 * and validate the information needed to install the adapter
 * properly without interfering with a previous adapter config.
 */
 
/**
 * The defaults for init
 */
var defaultInitOptions = {
  save: false,
  saveDev: true,
  saveExact: false,
  force: false
};
 
/**
 * Runs npm install for the adapter then modifies the config.commitizen as needed
 */
function init(sh, repoPath, adapterNpmName) {
  var _ref = arguments.length <= 3 || arguments[3] === undefined ? defaultInitOptions : arguments[3];
 
  var _ref$save = _ref.save;
  var save = _ref$save === undefined ? false : _ref$save;
  var _ref$saveDev = _ref.saveDev;
  var saveDev = _ref$saveDev === undefined ? true : _ref$saveDev;
  var _ref$saveExact = _ref.saveExact;
  var saveExact = _ref$saveExact === undefined ? false : _ref$saveExact;
  var _ref$force = _ref.force;
  var force = _ref$force === undefined ? false : _ref$force;
 
  // Don't let things move forward if required args are missing
  checkRequiredArguments(sh, repoPath, adapterNpmName);
 
  // Move to the correct directory so we can run commands
  sh.cd(repoPath);
 
  // Load the current adapter config
  var adapterConfig = loadAdapterConfig();
 
  // Get the npm string mappings based on the arguments provided
  var stringMappings = getNpmInstallStringMappings(save, saveDev, saveExact, force);
 
  // Generate a string that represents the npm install command
  var installAdapterCommand = generateNpmInstallAdapterCommand(stringMappings, adapterNpmName);
 
  // Check for previously installed adapters
  if (adapterConfig && adapterConfig.path && adapterConfig.path.length > 0) {
 
    // console.log(`
    //   Previous adapter detected!
    // `);
 
    if (!force) {
 
      // console.log(`
      //   Previous adapter detected!
      // `);
 
      throw 'A previous adapter is already configured. Use --force to override';
    } else {
      // Override it
      try {
        (0, _commonUtil.executeShellCommand)(sh, repoPath, installAdapterCommand);
        addPathToAdapterConfig(sh, CLI_PATH, repoPath, adapterNpmName);
      } catch (e) {
        console.error(e);
      }
    }
  } else {
 
    // console.log(`
    //   No previous adapter was detected
    // `);
 
    try {
 
      (0, _commonUtil.executeShellCommand)(sh, repoPath, installAdapterCommand);
      addPathToAdapterConfig(sh, CLI_PATH, repoPath, adapterNpmName);
    } catch (e) {
      console.error(e);
    }
  }
}
 
/**
 * Checks to make sure that the required arguments are passed
 * Throws an exception if any are not.
 */
function checkRequiredArguments(sh, path, adapterNpmName) {
  Iif (!sh) {
    throw "You must pass an instance of shelljs when running init.";
  }
  Iif (!path) {
    throw "Path is required when running init.";
  }
  Iif (!adapterNpmName) {
    throw "The adapter's npm name is required when running init.";
  }
}
 
/**
 * CONFIG
 * Loads and returns the adapter config at key config.commitizen, if it exists
 */
function loadAdapterConfig() {
  var config = configLoader.load();
  if (config) {
    return config;
  } else {
    return;
  }
}
module.exports = exports['default'];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3RyYXZpcy9idWlsZC9jb21taXRpemVuL2N6LWNsaS9zcmMvY29tbWl0aXplbi9pbml0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7b0JBQWlCLE1BQU07Ozs7NEJBQ08sZ0JBQWdCOztJQUFsQyxZQUFZOzswQkFDVSxnQkFBZ0I7O3VCQUN6QixXQUFXOztJQUF4QixPQUFPOztJQUdqQixzQkFBc0IsR0FHcEIsT0FBTyxDQUhULHNCQUFzQjtJQUN0QixnQ0FBZ0MsR0FFOUIsT0FBTyxDQUZULGdDQUFnQztJQUNoQywyQkFBMkIsR0FDekIsT0FBTyxDQURULDJCQUEyQjtxQkFHZCxJQUFJOztBQUVuQixJQUFNLFFBQVEsR0FBRyxrQkFBSyxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBbUJ2RCxJQUFNLGtCQUFrQixHQUFHO0FBQ3pCLE1BQUksRUFBRSxLQUFLO0FBQ1gsU0FBTyxFQUFFLElBQUk7QUFDYixXQUFTLEVBQUUsS0FBSztBQUNoQixPQUFLLEVBQUUsS0FBSztDQUNiLENBQUM7Ozs7O0FBS0YsU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBS2xCO21FQUFwQixrQkFBa0I7O3VCQUpwQixJQUFJO01BQUosSUFBSSw2QkFBRyxLQUFLOzBCQUNaLE9BQU87TUFBUCxPQUFPLGdDQUFHLElBQUk7NEJBQ2QsU0FBUztNQUFULFNBQVMsa0NBQUcsS0FBSzt3QkFDakIsS0FBSztNQUFMLEtBQUssOEJBQUcsS0FBSzs7O0FBSWIsd0JBQXNCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQzs7O0FBR3JELElBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7OztBQUdoQixNQUFJLGFBQWEsR0FBRyxpQkFBaUIsRUFBRSxDQUFDOzs7QUFHeEMsTUFBSSxjQUFjLEdBQUcsMkJBQTJCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7OztBQUdsRixNQUFJLHFCQUFxQixHQUFHLGdDQUFnQyxDQUFDLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQzs7O0FBRzdGLE1BQUcsYUFBYSxJQUFJLGFBQWEsQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFFOzs7Ozs7QUFNckUsUUFBRyxDQUFDLEtBQUssRUFBRTs7Ozs7O0FBTVQsWUFBTSxtRUFBbUUsQ0FBQztLQUMzRSxNQUFNOztBQUNMLFVBQUk7QUFDRiw2Q0FBb0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3pELDhCQUFzQixDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO09BQ2hFLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDVixlQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO09BQ2xCO0tBQ0Y7R0FFRixNQUFNOzs7Ozs7QUFNTCxRQUFJOztBQUVGLDJDQUFvQixFQUFFLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDekQsNEJBQXNCLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUM7S0FDaEUsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNWLGFBQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEI7R0FDRjtDQUNGOzs7Ozs7QUFNRCxTQUFTLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFO0FBQ3hELE1BQUcsQ0FBQyxFQUFFLEVBQUU7QUFDTixVQUFNLHlEQUF5RCxDQUFDO0dBQ2pFO0FBQ0QsTUFBRyxDQUFDLElBQUksRUFBRTtBQUNSLFVBQU0scUNBQXFDLENBQUM7R0FDN0M7QUFDRCxNQUFHLENBQUMsY0FBYyxFQUFFO0FBQ2xCLFVBQU0sdURBQXVELENBQUM7R0FDL0Q7Q0FDRjs7Ozs7O0FBTUQsU0FBUyxpQkFBaUIsR0FBRztBQUMzQixNQUFJLE1BQU0sR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakMsTUFBRyxNQUFNLEVBQUU7QUFDVCxXQUFPLE1BQU0sQ0FBQztHQUNmLE1BQU07QUFDTCxXQUFPO0dBQ1I7Q0FDRiIsImZpbGUiOiIvaG9tZS90cmF2aXMvYnVpbGQvY29tbWl0aXplbi9jei1jbGkvc3JjL2NvbW1pdGl6ZW4vaW5pdC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY29uZmlnTG9hZGVyIGZyb20gJy4vY29uZmlnTG9hZGVyJztcbmltcG9ydCB7ZXhlY3V0ZVNoZWxsQ29tbWFuZH0gZnJvbSAnLi4vY29tbW9uL3V0aWwnO1xuaW1wb3J0ICogYXMgYWRhcHRlciBmcm9tICcuL2FkYXB0ZXInO1xuXG5sZXQge1xuICBhZGRQYXRoVG9BZGFwdGVyQ29uZmlnLFxuICBnZW5lcmF0ZU5wbUluc3RhbGxBZGFwdGVyQ29tbWFuZCxcbiAgZ2V0TnBtSW5zdGFsbFN0cmluZ01hcHBpbmdzXG59ID0gYWRhcHRlcjtcblxuZXhwb3J0IGRlZmF1bHQgaW5pdDtcblxuY29uc3QgQ0xJX1BBVEggPSBwYXRoLm5vcm1hbGl6ZShfX2Rpcm5hbWUgKyAnLy4uLy4uLycpO1xuXG4vKipcbiAqIENaIElOSVRcbiAqIFxuICogSW5pdCBpcyBnZW5lcmFsbHkgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyBhbiBhZGFwdGVyIGluXG4gKiBhIHVzZXIncyBwcm9qZWN0LiBUaGUgZ29hbCBpcyB0byBiZSBhYmxlIHRvIHJ1biBcbiAqIGBjb21taXRpemVuIGluaXRgIGFuZCBiZSBwcm9tcHRlZCBmb3IgY2VydGFpbiBmaWVsZHMgd2hpY2hcbiAqIHdpbGwgaGVscCB5b3UgaW5zdGFsbCB0aGUgcHJvcGVyIGFkYXB0ZXIgZm9yIHlvdXIgcHJvamVjdC5cbiAqIFxuICogSW5pdCBkb2VzIG5vdCBhY3R1YWxseSBjcmVhdGUgdGhlIGFkYXB0ZXIgKGl0IGRlZmVycyB0byBhZGFwdGVyXG4gKiBmb3IgdGhpcykuIEluc3RlYWQsIGl0IGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBoZWxwIGdhdGhlclxuICogYW5kIHZhbGlkYXRlIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaW5zdGFsbCB0aGUgYWRhcHRlclxuICogcHJvcGVybHkgd2l0aG91dCBpbnRlcmZlcmluZyB3aXRoIGEgcHJldmlvdXMgYWRhcHRlciBjb25maWcuXG4gKi9cblxuLyoqXG4gKiBUaGUgZGVmYXVsdHMgZm9yIGluaXRcbiAqL1xuY29uc3QgZGVmYXVsdEluaXRPcHRpb25zID0ge1xuICBzYXZlOiBmYWxzZSxcbiAgc2F2ZURldjogdHJ1ZSxcbiAgc2F2ZUV4YWN0OiBmYWxzZSxcbiAgZm9yY2U6IGZhbHNlXG59O1xuXG4vKipcbiAqIFJ1bnMgbnBtIGluc3RhbGwgZm9yIHRoZSBhZGFwdGVyIHRoZW4gbW9kaWZpZXMgdGhlIGNvbmZpZy5jb21taXRpemVuIGFzIG5lZWRlZFxuICovXG5mdW5jdGlvbiBpbml0KHNoLCByZXBvUGF0aCwgYWRhcHRlck5wbU5hbWUsIHtcbiAgc2F2ZSA9IGZhbHNlLCBcbiAgc2F2ZURldiA9IHRydWUsIFxuICBzYXZlRXhhY3QgPSBmYWxzZSxcbiAgZm9yY2UgPSBmYWxzZVxufSA9IGRlZmF1bHRJbml0T3B0aW9ucykge1xuICBcbiAgLy8gRG9uJ3QgbGV0IHRoaW5ncyBtb3ZlIGZvcndhcmQgaWYgcmVxdWlyZWQgYXJncyBhcmUgbWlzc2luZ1xuICBjaGVja1JlcXVpcmVkQXJndW1lbnRzKHNoLCByZXBvUGF0aCwgYWRhcHRlck5wbU5hbWUpO1xuICBcbiAgLy8gTW92ZSB0byB0aGUgY29ycmVjdCBkaXJlY3Rvcnkgc28gd2UgY2FuIHJ1biBjb21tYW5kc1xuICBzaC5jZChyZXBvUGF0aCk7XG4gIFxuICAvLyBMb2FkIHRoZSBjdXJyZW50IGFkYXB0ZXIgY29uZmlnXG4gIGxldCBhZGFwdGVyQ29uZmlnID0gbG9hZEFkYXB0ZXJDb25maWcoKTtcbiAgXG4gIC8vIEdldCB0aGUgbnBtIHN0cmluZyBtYXBwaW5ncyBiYXNlZCBvbiB0aGUgYXJndW1lbnRzIHByb3ZpZGVkXG4gIGxldCBzdHJpbmdNYXBwaW5ncyA9IGdldE5wbUluc3RhbGxTdHJpbmdNYXBwaW5ncyhzYXZlLCBzYXZlRGV2LCBzYXZlRXhhY3QsIGZvcmNlKTtcbiAgICBcbiAgLy8gR2VuZXJhdGUgYSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBucG0gaW5zdGFsbCBjb21tYW5kXG4gIGxldCBpbnN0YWxsQWRhcHRlckNvbW1hbmQgPSBnZW5lcmF0ZU5wbUluc3RhbGxBZGFwdGVyQ29tbWFuZChzdHJpbmdNYXBwaW5ncywgYWRhcHRlck5wbU5hbWUpO1xuXG4gIC8vIENoZWNrIGZvciBwcmV2aW91c2x5IGluc3RhbGxlZCBhZGFwdGVyc1xuICBpZihhZGFwdGVyQ29uZmlnICYmIGFkYXB0ZXJDb25maWcucGF0aCAmJiBhZGFwdGVyQ29uZmlnLnBhdGgubGVuZ3RoPjApIHtcbiAgICBcbiAgICAvLyBjb25zb2xlLmxvZyhgXG4gICAgLy8gICBQcmV2aW91cyBhZGFwdGVyIGRldGVjdGVkISBcbiAgICAvLyBgKTtcbiAgICBcbiAgICBpZighZm9yY2UpIHsgXG4gICAgICBcbiAgICAgIC8vIGNvbnNvbGUubG9nKGBcbiAgICAgIC8vICAgUHJldmlvdXMgYWRhcHRlciBkZXRlY3RlZCEgXG4gICAgICAvLyBgKTtcbiAgICAgIFxuICAgICAgdGhyb3cgJ0EgcHJldmlvdXMgYWRhcHRlciBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQuIFVzZSAtLWZvcmNlIHRvIG92ZXJyaWRlJzsgIFxuICAgIH0gZWxzZSB7IC8vIE92ZXJyaWRlIGl0XG4gICAgICB0cnkge1xuICAgICAgICBleGVjdXRlU2hlbGxDb21tYW5kKHNoLCByZXBvUGF0aCwgaW5zdGFsbEFkYXB0ZXJDb21tYW5kKTtcbiAgICAgICAgYWRkUGF0aFRvQWRhcHRlckNvbmZpZyhzaCwgQ0xJX1BBVEgsIHJlcG9QYXRoLCBhZGFwdGVyTnBtTmFtZSk7IFxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBcbiAgfSBlbHNlIHtcbiAgICBcbiAgICAvLyBjb25zb2xlLmxvZyhgXG4gICAgLy8gICBObyBwcmV2aW91cyBhZGFwdGVyIHdhcyBkZXRlY3RlZCBcbiAgICAvLyBgKTsgXG5cbiAgICB0cnkge1xuICAgICAgXG4gICAgICBleGVjdXRlU2hlbGxDb21tYW5kKHNoLCByZXBvUGF0aCwgaW5zdGFsbEFkYXB0ZXJDb21tYW5kKTtcbiAgICAgIGFkZFBhdGhUb0FkYXB0ZXJDb25maWcoc2gsIENMSV9QQVRILCByZXBvUGF0aCwgYWRhcHRlck5wbU5hbWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlZCBhcmd1bWVudHMgYXJlIHBhc3NlZFxuICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiBhbnkgYXJlIG5vdC5cbiAqL1xuZnVuY3Rpb24gY2hlY2tSZXF1aXJlZEFyZ3VtZW50cyhzaCwgcGF0aCwgYWRhcHRlck5wbU5hbWUpIHtcbiAgaWYoIXNoKSB7XG4gICAgdGhyb3cgXCJZb3UgbXVzdCBwYXNzIGFuIGluc3RhbmNlIG9mIHNoZWxsanMgd2hlbiBydW5uaW5nIGluaXQuXCI7XG4gIH1cbiAgaWYoIXBhdGgpIHtcbiAgICB0aHJvdyBcIlBhdGggaXMgcmVxdWlyZWQgd2hlbiBydW5uaW5nIGluaXQuXCI7XG4gIH1cbiAgaWYoIWFkYXB0ZXJOcG1OYW1lKSB7XG4gICAgdGhyb3cgXCJUaGUgYWRhcHRlcidzIG5wbSBuYW1lIGlzIHJlcXVpcmVkIHdoZW4gcnVubmluZyBpbml0LlwiO1xuICB9XG59XG5cbi8qKlxuICogQ09ORklHXG4gKiBMb2FkcyBhbmQgcmV0dXJucyB0aGUgYWRhcHRlciBjb25maWcgYXQga2V5IGNvbmZpZy5jb21taXRpemVuLCBpZiBpdCBleGlzdHNcbiAqL1xuZnVuY3Rpb24gbG9hZEFkYXB0ZXJDb25maWcoKSB7XG4gIGxldCBjb25maWcgPSBjb25maWdMb2FkZXIubG9hZCgpO1xuICBpZihjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnOyBcbiAgfSBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbn0iXX0=