|
|
|
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()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
)
|
|
|
|
}
|