var util = require('./util');
var spawn = require('child_process').spawn;
var path = require('path');
var travisFoldStart = require('../travis/travis-fold');


module.exports = {
  dir: pubGetDir,
  subDir: pubGetSubDir
};

function pubGetDir(gulp, plugins, config) {
  return function() {
    var travisFoldEnd = travisFoldStart(`pubget-${config.dir}`);

    return util.processToPromise(spawn(config.command, ['upgrade'], {
      stdio: 'inherit',
      cwd: config.dir
    })).then(travisFoldEnd);
  };
};

function pubGetSubDir(gulp, plugins, config) {
  return function() {
    var travisFoldEnd = travisFoldStart(`pubget-${config.command}-${config.dir}`);

    // We need to execute pubspec serially as otherwise we can get into trouble
    // with the pub cache...
    return util.forEachSubDirSequential(config.dir, function(subDir) {
      return util.processToPromise(spawn(config.command, ['upgrade'], {
        stdio: 'inherit',
        cwd: subDir
      }));
    }).then(travisFoldEnd);
  };
};