• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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