all files / mlpm/lib/commands/ version.js

100% Statements 40/40
100% Branches 26/26
100% Functions 8/8
100% Lines 29/29
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    11× 11× 11×                                                         11×   11×  
'use strict'
 
var log = require('winston')
var semver = require('semver')
var project = require('../project.js')
 
// heavily inspired by https://github.com/npm/npm/blob/master/lib/version.js
function updateVersion(pkgConfig, version, cb) {
  var newVersion = semver.valid( version )
 
  if (!newVersion) newVersion = semver.inc( pkgConfig.version, version )
 
  // TODO: process.nextTick() ?
 
  if (!newVersion) return cb(new Error('invalid input: ' + version))
  if ( pkgConfig.version === newVersion ) return cb(new Error('Version not changed'))
 
  pkgConfig.version = newVersion
 
  cb(null)
}
 
function version(args) {
  project.getConfig(function(err, pkgConfig) {
    if (err) return log.error(err)
 
    var oldVersion = pkgConfig.version
      , updateGitRepo = true
 
    project.getRepoStatus(function(err, changes) {
      if (err) updateGitRepo = false
 
      if ( changes && changes.length ) return log.error( new Error('git repository not clean') )
 
      updateVersion(pkgConfig, args.version, function(err) {
        if (err) return log.error(err)
 
        project.saveConfig(pkgConfig, function(err) {
          if (err) return log.error(err)
 
          log.info( 'updated project version from ' + oldVersion + ' to ' + pkgConfig.version )
 
          if ( !updateGitRepo ) return
 
          project.commitConfig( args.message || pkgConfig.version, function(err) {
            if (err) return log.error(err)
 
            project.tagRepo(pkgConfig.version, function(err) {
              if (err) return log.error(err)
            })
          })
        })
      })
    })
  })
}
 
version.usage = 'mlpm version [<newversion> | major | minor | patch | prerelease | preminor | premajor ]'
 
module.exports.command = version