Skip to content

Commit db319b0

Browse files
committed
Make github internals testable
1 parent 1603bc6 commit db319b0

File tree

8 files changed

+101
-14
lines changed

8 files changed

+101
-14
lines changed

lib/find_git.js renamed to lib/git/find_git.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
var path = require('path');
44
var fs = require('fs');
5+
var gitDir = require('./git_dir');
56

67
/**
78
* Given a full path to a single file, iterate upwards through the filesystem
@@ -12,7 +13,7 @@ var fs = require('fs');
1213
function findGit(filename) {
1314
var paths = filename.split(path.sep);
1415
for (var i = paths.length; i > 0; i--) {
15-
var p = path.resolve(paths.slice(0, i).join(path.sep) + path.sep + '.git');
16+
var p = path.resolve(paths.slice(0, i).join(path.sep) + path.sep + gitDir.name);
1617
if (fs.existsSync(p)) {
1718
return p;
1819
}

lib/git/url_prefix.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var fs = require('fs');
2+
var path = require('path');
3+
var urlFromGit = require('github-url-from-git');
4+
var getRemoteOrigin = require('remote-origin-url');
5+
6+
function getGithubURLPrefix(root) {
7+
return urlFromGit(getRemoteOrigin.sync(root)) + '/blob/' +
8+
fs.readFileSync(path.join(root, '.git',
9+
fs.readFileSync(path.join(root, '.git', 'HEAD'), 'utf8')
10+
.match(/ref\: (.*)/)[1]), 'utf8').trim() + '/';
11+
}
12+
13+
module.exports = getGithubURLPrefix;

lib/github.js

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,8 @@
22

33
var path = require('path');
44
var fs = require('fs');
5-
var urlFromGit = require('github-url-from-git');
6-
var getRemoteOrigin = require('remote-origin-url');
7-
var findGit = require('../lib/find_git');
8-
9-
// TODO: cache/memoize the output of this method
10-
function getURLPrefix(root) {
11-
var remoteURL = getRemoteOrigin.sync(root);
12-
var head = fs.readFileSync(path.join(root, '.git', 'HEAD'), 'utf8');
13-
var ref = head.match(/ref\: (.*)/);
14-
var sha = fs.readFileSync(path.join(root, '.git', ref[1]), 'utf8').trim();
15-
return urlFromGit(remoteURL) + '/blob/' + sha + '/';
16-
}
5+
var findGit = require('../lib/git/find_git');
6+
var getGithubURLPrefix = require('../lib/git/url_prefix');
177

188
function getFileRoot(file) {
199
return path.dirname(findGit(file));
@@ -28,7 +18,7 @@ function getFileRoot(file) {
2818
*/
2919
module.exports = function (comment) {
3020
var root = getFileRoot(comment.context.file);
31-
var urlPrefix = getURLPrefix(root);
21+
var urlPrefix = getGithubURLPrefix(root);
3222
comment.context.path = comment.context.file.replace(root + '/', '');
3323
comment.context.github = urlPrefix +
3424
comment.context.file.replace(root + '/', '') +

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
"eslint": "^1.5.1",
4949
"glob": "^5.0.2",
5050
"lodash": "^3.10.1",
51+
"mock-fs": "^3.2.0",
5152
"tap": "^1.4.1"
5253
},
5354
"keywords": [

test/lib/git/find_git.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
'use strict';
2+
3+
var test = require('tap').test,
4+
path = require('path'),
5+
mock = require('mock-fs'),
6+
mockRepo = require('./mock_repo'),
7+
findGit = require('../../../lib/git/find_git');
8+
9+
test('findGit', function (t) {
10+
11+
mock(mockRepo);
12+
13+
t.equal(
14+
findGit(
15+
'/my/repository/path/index.js'),
16+
'/my/repository/path/.git', 'finds git path');
17+
18+
mock.restore();
19+
20+
t.end();
21+
});
22+

test/lib/git/mock_repo.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
module.exports = {
2+
'/my': {
3+
repository: {
4+
path: {
5+
'.git': {
6+
'HEAD': 'ref: refs/heads/master',
7+
'config': '[remote "origin"]\n' +
8+
'url = [email protected]:foo/bar.git\n' +
9+
'fetch = +refs/heads/*:refs/remotes/origin/*',
10+
refs: {
11+
heads: {
12+
master: 'this_is_the_sha'
13+
}
14+
}
15+
},
16+
'index.js': 'module.exports = 42;'
17+
}
18+
}
19+
},
20+
};

test/lib/git/url_prefix.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'use strict';
2+
3+
var test = require('tap').test,
4+
mock = require('mock-fs'),
5+
mockRepo = require('./mock_repo'),
6+
getGithubURLPrefix = require('../../../lib/git/url_prefix');
7+
8+
test('getGithubURLPrefix', function (t) {
9+
10+
mock(mockRepo);
11+
12+
t.equal(
13+
getGithubURLPrefix(
14+
'/my/repository/path/'),
15+
'https://github.com/foo/bar/blob/this_is_the_sha/', 'finds git path');
16+
17+
mock.restore();
18+
19+
t.end();
20+
});

test/lib/github.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
'use strict';
2+
3+
var test = require('tap').test,
4+
parse = require('../../lib/parsers/javascript'),
5+
github = require('../../lib/github');
6+
7+
function toComment(fn, filename) {
8+
return parse({
9+
file: filename,
10+
source: fn instanceof Function ? '(' + fn.toString() + ')' : fn
11+
})[0];
12+
}
13+
14+
function evaluate(fn) {
15+
return toComment(fn, 'input.js');
16+
}
17+
18+
test('github', function (t) {
19+
t.end();
20+
});

0 commit comments

Comments
 (0)