All files / generator local.js

100% Statements 56/56
100% Branches 8/8
100% Functions 4/4
100% Lines 56/56

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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 571x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 1x 1x 1x 1x 1x 1x 1x 1x 1x 3x 3x 3x 3x 3x 6x 6x 6x 6x 2x 6x 2x 2x 3x 3x 3x 3x 1x 1x 2x 2x 2x 2x 2x 1x 1x 2x 2x 2x 2x 2x 1x 1x  
var fs = require('fs');
var ini = require('ini');
var p = require('path');
var svnInfo = require('svn-info');
 
/**
 * Configuration generator for local repositories.
 *
 * @param {String} dir directory where the local repositories are located
 * @class
 */
function Local(dir) {
  this.dir = dir;
}
 
/**
 * Generate Repoman configuration from local repositories.
 * Only supports vanilla git clone (using git config),
 * and subversion checkouts (using svn info).
 *
 * @param {Function} cb standard cb(err, result) callback
 */
Local.prototype.generate = function(cb) {
  var self = this;
  var config = {};
  var repos = fs.readdirSync(this.dir);
 
  repos.forEach(function(repo) {
    var gitConfig = p.join(repo, '.git', 'config');
    var svnEntries = p.join(repo, '.svn', 'entries');
 
    if (fs.existsSync(gitConfig)) {
      self._git(gitConfig, repo, config);
    } else if (fs.existsSync(svnEntries)) {
      self._svn(svnEntries, repo, config);
    }
  });
 
  cb(null, config);
};
 
Local.prototype._git = function(gitConfig, repo, config) {
  var info = ini.parse(fs.readFileSync(gitConfig, 'utf-8'));
 
  if (info['remote "origin"'])
    config[repo] = { type: 'git', url: info['remote "origin"'].url };
};
 
Local.prototype._svn = function(svnEntries, repo, config) {
  var info = svnInfo.sync(repo);
  var url = info.repositoryRoot;
 
  config[repo] = { type: 'svn', url: url };
};
 
module.exports = Local;