2 var resolve = require('path').resolve
4 var osenv = require('osenv')
5 var mkdirp = require('mkdirp')
6 var rimraf = require('rimraf')
7 var test = require('tap').test
9 var npm = require('../../lib/npm.js')
10 var common = require('../common-tap.js')
12 var pkg = resolve(__dirname, 'add-remote-git-shrinkwrap')
13 var repo = resolve(__dirname, 'add-remote-git-shrinkwrap-repo')
19 var pjParent = JSON.stringify({
23 'child': 'git://localhost:1234/child.git#master'
27 var pjChild = JSON.stringify({
32 test('setup', function (t) {
34 setup(function (er, r) {
35 t.ifError(er, 'git started up successfully')
38 daemon = r[r.length - 2]
39 daemonPID = r[r.length - 1]
46 test('install from repo', function (t) {
48 npm.commands.install('.', [], function (er) {
49 t.ifError(er, 'npm installed via git')
55 test('shrinkwrap gets correct _from and _resolved (#7121)', function (t) {
59 '--loglevel', 'silent'
62 function (er, code, stdout, stderr) {
63 t.ifError(er, 'npm shrinkwrapped without errors')
64 t.notOk(code, '`npm shrinkwrap` exited with 0')
65 t.equal(stdout.trim(), 'wrote npm-shrinkwrap.json')
66 t.notOk(stderr, 'no error output on successful shrinkwrap')
68 var shrinkwrap = require(resolve(pkg, 'npm-shrinkwrap.json'))
70 shrinkwrap.dependencies.child.from,
71 'git://localhost:1234/child.git#master',
72 'npm shrinkwrapped from correctly'
76 ['rev-list', '-n1', 'master'],
77 { cwd: repo, env: process.env },
78 function (er, stdout, stderr) {
79 t.ifErr(er, 'git rev-list ran without error')
80 t.notOk(stderr, 'no error output')
81 var treeish = stdout.trim()
84 shrinkwrap.dependencies.child.resolved,
85 'git://localhost:1234/child.git#' + treeish,
86 'npm shrinkwrapped resolved correctly'
96 test('clean', function (t) {
97 daemon.on('close', function () {
101 process.kill(daemonPID)
104 function bootstrap () {
106 fs.writeFileSync(resolve(pkg, 'package.json'), pjParent)
109 function setup (cb) {
111 fs.writeFileSync(resolve(repo, 'package.json'), pjChild)
112 npm.load({ prefix: pkg, registry: common.registry, loglevel: 'silent' }, function () {
113 git = require('../../lib/utils/git.js')
115 function startDaemon (cb) {
121 '--listen=localhost',
130 stdio: ['pipe', 'pipe', 'pipe']
133 d.stderr.on('data', childFinder)
135 function childFinder (c) {
136 var cpid = c.toString().match(/^\[(\d+)\]/)
138 this.removeListener('data', childFinder)
139 cb(null, [d, cpid[1]])
148 ['clone', '--bare', repo, 'child.git'],
149 { cwd: pkg, env: process.env }
157 function cleanup () {
158 process.chdir(osenv.tmpdir())