You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

170 lines
4.0 KiB

var cat = require('graceful-fs').writeFileSync
var exec = require('child_process').exec
var readdir = require('graceful-fs').readdirSync
var resolve = require('path').resolve
var mkdirp = require('mkdirp')
var rimraf = require('rimraf')
var test = require('tap').test
var tmpdir = require('osenv').tmpdir
var which = require('which')
var common = require('../common-tap.js')
var pkg = resolve(__dirname, 'git-npmignore')
var dep = resolve(pkg, 'deps', 'gitch')
var packname = 'gitch-1.0.0.tgz'
var packed = resolve(pkg, packname)
var modules = resolve(pkg, 'node_modules')
var installed = resolve(modules, 'gitch')
var expected = [
'a.js',
'package.json',
'.npmignore'
].sort()
var EXEC_OPTS = { cwd: pkg }
var gitignore = 'node_modules/\n'
var npmignore = 't.js\n'
var a = "console.log('hi');"
var t = "require('tap').test(function (t) { t.pass('I am a test!'); t.end(); });"
var fixture = {
'name': 'gitch',
'version': '1.0.0',
'private': true,
'main': 'a.js'
}
test('setup', function (t) {
setup(function (er) {
t.ifError(er, 'setup ran OK')
t.end()
})
})
test('npm pack directly from directory', function (t) {
packInstallTest(dep, t)
})
test('npm pack via git', function (t) {
packInstallTest('git+file://' + dep, t)
})
test('cleanup', function (t) {
cleanup()
t.end()
})
function packInstallTest (spec, t) {
common.npm(
[
'--loglevel', 'silent',
'pack', spec
],
EXEC_OPTS,
function (err, code, stdout, stderr) {
t.ifError(err, 'npm pack ran without error')
t.notOk(code, 'npm pack exited cleanly')
t.notOk(stderr, 'npm pack ran silently')
t.equal(stdout.trim(), packname, 'got expected package name')
common.npm(
[
'--loglevel', 'silent',
'install', packed
],
EXEC_OPTS,
function (err, code, stdout, stderr) {
t.ifError(err, 'npm install ran without error')
t.notOk(code, 'npm install exited cleanly')
t.notOk(stderr, 'npm install ran silently')
var actual = readdir(installed).sort()
t.same(actual, expected, 'no unexpected files in packed directory')
rimraf(packed, function () {
t.end()
})
}
)
}
)
}
function cleanup () {
process.chdir(tmpdir())
rimraf.sync(pkg)
}
function setup (cb) {
cleanup()
mkdirp.sync(modules)
mkdirp.sync(dep)
process.chdir(dep)
cat(resolve(dep, '.npmignore'), npmignore)
cat(resolve(dep, '.gitignore'), gitignore)
cat(resolve(dep, 'a.js'), a)
cat(resolve(dep, 't.js'), t)
cat(resolve(dep, 'package.json'), JSON.stringify(fixture))
common.npm(
[
'--loglevel', 'silent',
'cache', 'clean'
],
EXEC_OPTS,
function (er, code, _, stderr) {
if (er) return cb(er)
if (code) return cb(new Error('npm cache nonzero exit: ' + code))
if (stderr) return cb(new Error('npm cache clean error: ' + stderr))
which('git', function found (er, git) {
if (er) return cb(er)
exec(git + ' init', init)
function init (er, _, stderr) {
if (er) return cb(er)
if (stderr) return cb(new Error('git init error: ' + stderr))
exec(git + " config user.name 'Phantom Faker'", user)
}
function user (er, _, stderr) {
if (er) return cb(er)
if (stderr) return cb(new Error('git config error: ' + stderr))
exec(git + ' config user.email nope@not.real', email)
}
function email (er, _, stderr) {
if (er) return cb(er)
if (stderr) return cb(new Error('git config error: ' + stderr))
exec(git + ' add .', addAll)
}
function addAll (er, _, stderr) {
if (er) return cb(er)
if (stderr) return cb(new Error('git add . error: ' + stderr))
exec(git + ' commit -m boot', commit)
}
function commit (er, _, stderr) {
if (er) return cb(er)
if (stderr) return cb(new Error('git commit error: ' + stderr))
cb()
}
})
}
)
}