var path = require("path"); var assert = require("assert"); var promisify = require("promisify-node"); var fse = promisify(require("fs-extra")); var local = path.join.bind(path, __dirname); describe("Clone", function() { var NodeGit = require("../../"); var Repository = NodeGit.Repository; var Clone = NodeGit.Clone; var clonePath = local("../repos/clone"); var sshPublicKey = local("../id_rsa.pub"); var sshPrivateKey = local("../id_rsa"); // Set a reasonable timeout here now that our repository has grown. this.timeout(30000); beforeEach(function() { return fse.remove(clonePath).catch(function(err) { console.log(err); throw err; }); }); it("can clone with http", function() { var test = this; var url = "http://git.tbranyen.com/smart/site-content"; return Clone(url, clonePath).then(function(repo) { assert.ok(repo instanceof Repository); test.repository = repo; }); }); it("can clone with https", function() { var test = this; var url = "https://github.com/nodegit/test.git"; var opts = { remoteCallbacks: { certificateCheck: function() { return 1; } } }; return Clone(url, clonePath, opts).then(function(repo) { assert.ok(repo instanceof Repository); test.repository = repo; }); }); it("can clone using nested function", function() { var test = this; var url = "https://github.com/nodegit/test.git"; var opts = { remoteCallbacks: { certificateCheck: function() { return 1; } } }; return Clone.clone(url, clonePath, opts).then(function(repo) { assert.ok(repo instanceof Repository); test.repository = repo; }); }); it("can clone with ssh", function() { var test = this; var url = "git@github.com:nodegit/test.git"; var opts = { remoteCallbacks: { certificateCheck: function() { return 1; }, credentials: function(url, userName) { return NodeGit.Cred.sshKeyFromAgent(userName); } } }; return Clone(url, clonePath, opts).then(function(repo) { assert.ok(repo instanceof Repository); test.repository = repo; }); }); it("can clone with ssh while manually loading a key", function() { var test = this; var url = "git@github.com:nodegit/test.git"; var opts = { remoteCallbacks: { certificateCheck: function() { return 1; }, credentials: function(url, userName) { return NodeGit.Cred.sshKeyNew( userName, sshPublicKey, sshPrivateKey, ""); } } }; return Clone(url, clonePath, opts).then(function(repo) { assert.ok(repo instanceof Repository); test.repository = repo; }); }); it("can clone with git", function() { var test = this; var url = "git://github.com/nodegit/test.git"; var opts = { remoteCallbacks: { certificateCheck: function() { return 1; } } }; return Clone(url, clonePath, opts).then(function(repo) { test.repository = repo; assert.ok(repo instanceof Repository); }); }); it("can clone with filesystem", function() { var test = this; var prefix = process.platform === "win32" ? "" : "file://"; var url = prefix + local("../repos/empty"); return Clone(url, clonePath).then(function(repo) { assert.ok(repo instanceof Repository); test.repository = repo; }); }); it("will not segfault when accessing a url without username", function() { var url = "https://github.com/nodegit/private"; return Clone(url, clonePath, { remoteCallbacks: { certificateCheck: function() { return 1; }, credentials: function() { return NodeGit.Cred.userpassPlaintextNew("fake-token", "x-oauth-basic"); } } }).catch(function unhandledError() { }); }); });