1'use strict' 2 3var fs = require('fs') 4var resolve = require('path').resolve 5var url = require('url') 6 7var mkdirp = require('mkdirp') 8var test = require('tap').test 9 10var npm = require('../../lib/npm.js') 11var fetchPackageMetadata = require('../../lib/fetch-package-metadata.js') 12var common = require('../common-tap.js') 13 14var pkg = resolve(common.pkg, 'package') 15var repo = resolve(common.pkg, 'repo') 16mkdirp.sync(pkg) 17 18var git 19var cloneURL = 'git+file://' + resolve(pkg, 'child.git') 20 21var pjChild = JSON.stringify({ 22 name: 'child', 23 version: '1.0.3' 24}, null, 2) + '\n' 25 26test('setup', function (t) { 27 setup(function (er, r) { 28 t.ifError(er, 'git started up successfully') 29 30 t.end() 31 }) 32}) 33 34test('cache from repo', function (t) { 35 process.chdir(pkg) 36 fetchPackageMetadata(cloneURL, process.cwd(), {}, (err, manifest) => { 37 if (err) t.fail(err.message) 38 t.equal( 39 url.parse(manifest._resolved).protocol, 40 'git+file:', 41 'npm didn\'t go crazy adding git+git+git+git' 42 ) 43 t.equal(manifest._requested.type, 'git', 'cached git') 44 t.end() 45 }) 46}) 47 48test('save install', function (t) { 49 process.chdir(pkg) 50 fs.writeFileSync('package.json', JSON.stringify({ 51 name: 'parent', 52 version: '5.4.3' 53 }, null, 2) + '\n') 54 var prev = npm.config.get('save') 55 npm.config.set('save', true) 56 npm.commands.install('.', [cloneURL], function (er) { 57 npm.config.set('save', prev) 58 t.ifError(er, 'npm installed via git') 59 var pj = JSON.parse(fs.readFileSync('package.json', 'utf-8')) 60 var dep = pj.dependencies.child 61 t.equal( 62 url.parse(dep).protocol, 63 'git+file:', 64 'npm didn\'t strip the git+ from git+file://' 65 ) 66 67 t.end() 68 }) 69}) 70 71function setup (cb) { 72 mkdirp.sync(repo) 73 fs.writeFileSync(resolve(repo, 'package.json'), pjChild) 74 npm.load({ registry: common.registry, loglevel: 'silent' }, function () { 75 git = require('../../lib/utils/git.js') 76 77 common.makeGitRepo({ 78 path: repo, 79 commands: [git.chainableExec( 80 ['clone', '--bare', repo, 'child.git'], 81 { cwd: pkg, env: process.env } 82 )] 83 }, cb) 84 }) 85} 86