Skip to content

Commit a3aabae

Browse files
committed
add git scm-data-generator
1 parent 599ca17 commit a3aabae

File tree

6 files changed

+109
-11
lines changed

6 files changed

+109
-11
lines changed

index.js

+34-8
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ module.exports = {
1414
defaultConfig: {
1515
type: 'file-hash',
1616
filePattern: 'index.html',
17+
scm: 'git',
1718
distDir: function(context) {
1819
return context.distDir;
1920
},
@@ -22,17 +23,20 @@ module.exports = {
2223
},
2324
versionFile: 'package.json',
2425
},
26+
2527
prepare: function(context) {
2628
var self = this;
27-
var type = this.readConfig('type');
28-
var DataGenerator = require('./lib/data-generators')[type];
29-
var dataGenerator = new DataGenerator({
30-
plugin: this
31-
});
3229

33-
this.log('creating revision data using `' + type + '`', { verbose: true });
34-
return dataGenerator.generate()
35-
.then(function(data) {
30+
31+
var promises = {
32+
data: this._getData(),
33+
scm: this._getScmData()
34+
};
35+
36+
return Promise.hash(promises)
37+
.then(function(results) {
38+
var data = results.data;
39+
data.scm = results.scm;
3640
self.log('generated revision data for revision: `' + data.revisionKey + '`', { verbose: true });
3741
return data;
3842
})
@@ -41,6 +45,28 @@ module.exports = {
4145
})
4246
.catch(this._errorMessage.bind(this));
4347
},
48+
49+
_getData: function() {
50+
var type = this.readConfig('type');
51+
this.log('creating revision data using `' + type + '`', { verbose: true });
52+
var DataGenerator = require('./lib/data-generators')[type];
53+
return new DataGenerator({
54+
plugin: this
55+
}).generate();
56+
},
57+
58+
_getScmData: function() {
59+
var scm = this.readConfig('scm');
60+
if (scm) {
61+
var ScmDataGenerator = require('./lib/scm-data-generators')[scm];
62+
return new ScmDataGenerator({
63+
plugin: this
64+
}).generate()
65+
} else {
66+
return Promise.resolve();
67+
}
68+
},
69+
4470
_errorMessage: function(error) {
4571
this.log(error, { color: 'red' });
4672
return Promise.reject(error);

lib/scm-data-generators/git.js

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
var CoreObject = require('core-object');
2+
var Promise = require('ember-cli/lib/ext/promise');
3+
var gitRepoInfo = require('git-repo-info');
4+
var simpleGit = require('simple-git');
5+
6+
module.exports = CoreObject.extend({
7+
init: function(path) {
8+
this.path = path;
9+
},
10+
11+
generate: function() {
12+
var _this = this;
13+
return new Promise(function(resolve, reject) {
14+
simpleGit(_this.path).log(function(err, log) {
15+
var info = log.latest;
16+
var sha = info.hash.slice(0, 7);
17+
resolve({
18+
sha: info.hash.substring(1),
19+
email: info.author_email.substring(0, info.author_email.length - 1),
20+
name: info.author_name,
21+
timestamp: new Date(info.date).toISOString(),
22+
branch: gitRepoInfo().branch
23+
});
24+
});
25+
});
26+
}
27+
});

lib/scm-data-generators/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = {
2+
"git": require('./git'),
3+
};

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050
"ember-cli-deploy-plugin": "^0.2.1",
5151
"git-repo-info": "^1.1.2",
5252
"minimatch": "^2.0.4",
53-
"rsvp": "^3.0.18"
53+
"rsvp": "^3.0.18",
54+
"simple-git": "^1.26.2"
5455
},
5556
"ember-addon": {
5657
"configPath": "tests/dummy/config"

tests/unit/index-nodetest.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ describe('the index', function() {
7878
return previous;
7979
}, []);
8080

81-
assert.equal(messages.length, 5);
81+
assert.equal(messages.length, 6);
8282
});
8383

8484
it('adds default config to the config object', function() {
@@ -99,6 +99,7 @@ describe('the index', function() {
9999

100100
assert.isDefined(context.config['revision-data'].type);
101101
assert.isDefined(context.config['revision-data'].filePattern);
102+
assert.isDefined(context.config['revision-data'].scm);
102103
});
103104
});
104105

@@ -116,6 +117,7 @@ describe('the index', function() {
116117
"revision-data": {
117118
type: 'file-hash',
118119
filePattern: 'index.html',
120+
scm: 'git',
119121
distDir: function(context) {
120122
return context.distDir;
121123
},
@@ -131,8 +133,8 @@ describe('the index', function() {
131133
.then(function(result) {
132134
assert.equal(result.revisionData.revisionKey, 'ae1569f72495012cd5e8588e0f2f5d49');
133135
assert.isNotNull(result.revisionData.timestamp);
136+
assert.isNotNull(result.revisionData.scm.email);
134137
});
135138
});
136139
});
137140
});
138-
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
'use strict';
2+
3+
var assert = require('ember-cli/tests/helpers/assert');
4+
var gitRepoInfo = require('git-repo-info');
5+
6+
describe('the git scm data generator', function() {
7+
var ScmDataGenerator;
8+
var cwd;
9+
10+
before(function() {
11+
ScmDataGenerator = require('../../../../lib/scm-data-generators/git');
12+
gitRepoInfo._changeGitDir('dotgit');
13+
});
14+
15+
beforeEach(function() {
16+
cwd = process.cwd();
17+
});
18+
19+
afterEach(function() {
20+
process.chdir(cwd);
21+
});
22+
23+
describe('#generate', function() {
24+
it('returns the correct data', function() {
25+
process.chdir('tests/fixtures/repo');
26+
27+
var subject = new ScmDataGenerator('dotgit');
28+
29+
return assert.isFulfilled(subject.generate())
30+
.then(function(data) {
31+
assert.equal(data.sha, '41d41f081b45ad50935c08b1203220737d9739b4');
32+
assert.equal(data.email, 'alisdair@mcdiarmid.org');
33+
assert.equal(data.name, 'Alisdair McDiarmid');
34+
assert.isNotNull(data.timestamp);
35+
assert.equal(data.branch, 'master');
36+
});
37+
});
38+
});
39+
});

0 commit comments

Comments
 (0)