mirror of https://github.com/lukechilds/node.git
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
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()
|
|
}
|
|
})
|
|
}
|
|
)
|
|
}
|
|
|