You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

130 lines
2.8 KiB

var fs = require("fs")
var resolve = require("path").resolve
var chain = require("slide").chain
var osenv = require("osenv")
var mkdirp = require("mkdirp")
var rimraf = require("rimraf")
var test = require("tap").test
var npm = require("../../lib/npm.js")
var common = require("../common-tap.js")
var pkg = resolve(__dirname, "add-remote-git")
var repo = resolve(__dirname, "add-remote-git-repo")
var daemon
var daemonPID
var git
test("setup", function (t) {
bootstrap()
setup(function (er, r) {
t.ifError(er, "git started up successfully")
if (!er) {
daemon = r[r.length - 2]
daemonPID = r[r.length - 1]
}
t.end()
})
})
test("install from repo", function (t) {
process.chdir(pkg)
npm.commands.install(".", [], function (er) {
t.ifError(er, "npm installed via git")
t.end()
})
})
test("clean", function (t) {
daemon.on("close", function () {
cleanup()
t.end()
})
process.kill(daemonPID)
})
var pjParent = JSON.stringify({
name : "parent",
version : "1.2.3",
dependencies : {
"child" : "git://localhost:1234/child.git"
}
}, null, 2) + "\n"
var pjChild = JSON.stringify({
name : "child",
version : "1.0.3"
}, null, 2) + "\n"
function bootstrap () {
mkdirp.sync(pkg)
fs.writeFileSync(resolve(pkg, "package.json"), pjParent)
}
function setup (cb) {
mkdirp.sync(repo)
fs.writeFileSync(resolve(repo, "package.json"), pjChild)
npm.load({ registry : common.registry, loglevel : "silent" }, function () {
git = require("../../lib/utils/git.js")
function startDaemon (cb) {
// start git server
var d = git.spawn(
[
"daemon",
"--verbose",
"--listen=localhost",
"--export-all",
"--base-path=.",
"--port=1234"
],
{
cwd : pkg,
env : process.env,
stdio : ["pipe", "pipe", "pipe"]
}
)
d.stderr.on("data", childFinder)
function childFinder (c) {
var cpid = c.toString().match(/^\[(\d+)\]/)
if (cpid[1]) {
this.removeListener("data", childFinder)
cb(null, [d, cpid[1]])
}
}
}
var opts = {
cwd : repo,
env : process.env
}
chain(
[
git.chainableExec(["init"], opts),
git.chainableExec(["config", "user.name", "PhantomFaker"], opts),
git.chainableExec(["config", "user.email", "nope@not.real"], opts),
git.chainableExec(["add", "package.json"], opts),
git.chainableExec(["commit", "-m", "stub package"], opts),
git.chainableExec(
["clone", "--bare", repo, "child.git"],
{ cwd : pkg, env : process.env }
),
startDaemon
],
cb
)
})
}
function cleanup () {
process.chdir(osenv.tmpdir())
rimraf.sync(repo)
rimraf.sync(pkg)
}