1 var common = require('../common-tap.js')
2 var test = require('tap').test
3 var npm = require('../../')
4 var osenv = require('osenv')
5 var path = require('path')
7 var rimraf = require('rimraf')
8 var mkdirp = require('mkdirp')
9 var which = require('which')
10 var spawn = require('child_process').spawn
12 var pkg = path.resolve(__dirname, 'version-git-not-clean')
13 var cache = path.resolve(pkg, 'cache')
15 test('npm version <semver> with working directory not clean', function (t) {
17 npm.load({ cache: cache, registry: common.registry, prefix: pkg }, function () {
18 which('git', function (err, git) {
19 t.ifError(err, 'git found')
21 function addPackageJSON (_cb) {
22 var data = JSON.stringify({ name: 'blah', version: '0.1.2' })
23 fs.writeFile('package.json', data, function () {
24 var child = spawn(git, ['add', 'package.json'])
25 child.on('exit', function () {
26 var child2 = spawn(git, ['commit', 'package.json', '-m', 'init'])
28 child2.stdout.on('data', function (d) {
31 child2.on('exit', function () {
38 common.makeGitRepo({path: pkg}, function () {
39 addPackageJSON(function () {
40 var data = JSON.stringify({ name: 'blah', version: '0.1.3' })
41 fs.writeFile('package.json', data, function () {
42 npm.commands.version(['patch'], function (err) {
44 t.fail('should fail on non-clean working directory')
46 t.ok(err.message.match(/Git working directory not clean./))
47 t.ok(err.message.match(/M package.json/))
58 test('npm version <semver> --force with working directory not clean', function (t) {
63 '--registry', common.registry,
68 { cwd: pkg, env: {PATH: process.env.PATH} },
69 function (err, code, stdout, stderr) {
70 t.ifError(err, 'npm version ran without issue')
71 t.notOk(code, 'exited with a non-error code')
72 var errorLines = stderr.trim().split('\n')
73 .map(function (line) {
76 .filter(function (line) {
77 return !line.indexOf('using --force')
79 t.notOk(errorLines.length, 'no error output')
84 test('cleanup', function (t) {
85 // windows fix for locked files
86 process.chdir(osenv.tmpdir())