Skip to content
This repository was archived by the owner on Feb 18, 2024. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
95 changes: 53 additions & 42 deletions github.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ var mkdirp = require('mkdirp');
var rimraf = require('rimraf');
var request = require('request');
var expandTilde = require('expand-tilde');

var url = require('url');
var Promise = require('bluebird');
var asp = require('bluebird').Promise.promisify;

Expand All @@ -30,6 +30,15 @@ catch(e) {}

var execGit = require('./exec-git');

var jsGitApi = require('nogit/lib/js-git-api');
var jsGitNodeRequest = require('nogit/lib/js-git-node-request');
global.btoa = function(str) {
return (str instanceof Buffer ? str : new Buffer(str.toString(), 'binary')).toString('base64');
}
var jsGitTransportHttp = require('js-git/net/transport-http')(jsGitNodeRequest);
var jsGitfetchPackProtocol = require('js-git/net/git-fetch-pack');


function createRemoteStrings(auth, hostname) {
var authString = auth.username ? (encodeURIComponent(auth.username) + ':' + encodeURIComponent(auth.password) + '@') : '';
hostname = hostname || 'github.com';
Expand Down Expand Up @@ -340,54 +349,56 @@ GithubLocation.prototype = {
lookup: function(repo) {
var execOpt = this.execOpt;
var remoteString = this.remoteString;
return new Promise(function(resolve, reject) {
execGit('ls-remote ' + remoteString.replace(/(['"()])/g, '\\\$1') + repo + '.git refs/tags/* refs/heads/*', execOpt, function(err, stdout, stderr) {
if (err) {
if (err.toString().indexOf('not found') == -1) {
var error = new Error(stderr);
error.hideStack = true;
error.retriable = true;
reject(error);
}
else
resolve({ notfound: true });
}

versions = {};
var refs = stdout.split('\n');
for (var i = 0; i < refs.length; i++) {
if (!refs[i])
continue;
return new Promise(function(resolve, reject) {
var remote = remoteString + repo + '.git';
var parsed = url.parse(remote);
var auth = parsed.auth;
if(auth) {
delete parsed.auth;
remote = parsed.format();
var colon = auth.indexOf(':') ;
var username = colon == -1 ? auth : auth.substr(0, colon);
var password = colon == -1 ? '' : auth.substr(colon + 1);
}

var hash = refs[i].substr(0, refs[i].indexOf('\t'));
var refName = refs[i].substr(hash.length + 1);
var version;
var versionObj = { hash: hash, meta: {} };
var remoteTransport = jsGitTransportHttp(remote, username, password);
var api = jsGitfetchPackProtocol(remoteTransport, reject);
api.take(function(err, refs) {
if(err) reject(err)
else resolve(refs);
});
})
.then(function(refs) {
var versions = {};
for(var refName in refs) {
var hash = refs[refName];
var version;
var versionObj = { hash: hash, meta: {} };
if (refName.substr(0, 11) == 'refs/heads/') {
version = refName.substr(11);
versionObj.stable = false;
}

if (refName.substr(0, 11) == 'refs/heads/') {
version = refName.substr(11);
versionObj.stable = false;
}
else if (refName.substr(0, 10) == 'refs/tags/') {
if (refName.substr(refName.length - 3, 3) == '^{}')
version = refName.substr(10, refName.length - 13);
else
version = refName.substr(10);

else if (refName.substr(0, 10) == 'refs/tags/') {
if (refName.substr(refName.length - 3, 3) == '^{}')
version = refName.substr(10, refName.length - 13);
else
version = refName.substr(10);

if (version.substr(0, 1) == 'v' && semver.valid(version.substr(1))) {
version = version.substr(1);
// note when we remove a "v" which versions we need to add it back to
// to work out the tag version again
versionObj.meta.vPrefix = true;
}
if (version.substr(0, 1) == 'v' && semver.valid(version.substr(1))) {
version = version.substr(1);
// note when we remove a "v" which versions we need to add it back to
// to work out the tag version again
versionObj.meta.vPrefix = true;
}

versions[version] = versionObj;
} else {
continue;
}

resolve({ versions: versions });
});
versions[version] = versionObj;
}
return { versions: versions };
});
},

Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@
"expand-tilde": "^1.2.0",
"bluebird": "^3.0.5",
"graceful-fs": "^4.1.3",
"js-git": "^0.7.7",
"mkdirp": "~0.5.0",
"netrc": "^0.1.3",
"nogit": "^0.1.0",
"request": "~2.53.0",
"rimraf": "~2.3.2",
"semver": "^5.0.1",
Expand Down