1 var cat = require("graceful-fs").writeFileSync
2 var exec = require("child_process").exec
3 var readdir = require("graceful-fs").readdirSync
4 var resolve = require("path").resolve
6 var mkdirp = require("mkdirp")
7 var rimraf = require("rimraf")
8 var test = require("tap").test
9 var tmpdir = require("osenv").tmpdir
10 var which = require("which")
12 var common = require("../common-tap.js")
14 var pkg = resolve(__dirname, "git-npmignore")
15 var dep = resolve(pkg, "deps", "gitch")
16 var packname = "gitch-1.0.0.tgz"
17 var packed = resolve(pkg, packname)
18 var modules = resolve(pkg, "node_modules")
19 var installed = resolve(modules, "gitch")
30 var gitignore = "node_modules/\n"
31 var npmignore = "t.js\n"
33 var a = "console.log('hi');"
34 var t = "require('tap').test(function (t) { t.pass('I am a test!'); t.end(); });"
43 test("setup", function (t) {
45 t.ifError(er, "setup ran OK")
51 test("npm pack directly from directory", function (t) {
52 packInstallTest(dep, t)
55 test("npm pack via git", function (t) {
56 packInstallTest("git+file://"+dep, t)
59 test("cleanup", function (t) {
65 function packInstallTest (spec, t) {
68 "--loglevel", "silent",
72 function (err, code, stdout, stderr) {
73 t.ifError(err, "npm pack ran without error")
74 t.notOk(code, "npm pack exited cleanly")
75 t.notOk(stderr, "npm pack ran silently")
76 t.equal(stdout.trim(), packname, "got expected package name")
80 "--loglevel", "silent",
84 function (err, code, stdout, stderr) {
85 t.ifError(err, "npm install ran without error")
86 t.notOk(code, "npm install exited cleanly")
87 t.notOk(stderr, "npm install ran silently")
89 var actual = readdir(installed).sort()
90 t.same(actual, expected, "no unexpected files in packed directory")
92 rimraf(packed, function () {
101 function cleanup () {
102 process.chdir(tmpdir())
106 function setup (cb) {
114 cat(resolve(dep, ".npmignore"), npmignore)
115 cat(resolve(dep, ".gitignore"), gitignore)
116 cat(resolve(dep, "a.js"), a)
117 cat(resolve(dep, "t.js"), t)
118 cat(resolve(dep, "package.json"), JSON.stringify(fixture))
122 "--loglevel", "silent",
126 function (er, code, _, stderr) {
127 if (er) return cb(er)
128 if (code) return cb(new Error("npm cache nonzero exit: "+code))
129 if (stderr) return cb(new Error("npm cache clean error: "+stderr))
131 which("git", function found (er, git) {
132 if (er) return cb(er)
134 exec(git+" init", init)
136 function init (er, _, stderr) {
137 if (er) return cb(er)
138 if (stderr) return cb(new Error("git init error: "+stderr))
140 exec(git+" config user.name 'Phantom Faker'", user)
143 function user (er, _, stderr) {
144 if (er) return cb(er)
145 if (stderr) return cb(new Error("git config error: "+stderr))
147 exec(git+" config user.email nope@not.real", email)
150 function email (er, _, stderr) {
151 if (er) return cb(er)
152 if (stderr) return cb(new Error("git config error: "+stderr))
154 exec(git+" add .", addAll)
157 function addAll (er, _, stderr) {
158 if (er) return cb(er)
159 if (stderr) return cb(new Error("git add . error: "+stderr))
161 exec(git+" commit -m boot", commit)
164 function commit (er, _, stderr) {
165 if (er) return cb(er)
166 if (stderr) return cb(new Error("git commit error: "+stderr))