-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathcommand_commit.js
More file actions
67 lines (53 loc) · 1.46 KB
/
command_commit.js
File metadata and controls
67 lines (53 loc) · 1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
'use strict';
var async = require('grunt').util.async;
module.exports = function (task, exec, done) {
var options = task.options({
message: 'Commit',
ignoreEmpty: false,
noVerify: false,
noStatus: false,
force: false
});
var args = ['commit', '-m', options.message];
if (options.noVerify) {
args.push('--no-verify');
}
if (options.noStatus) {
args.push('--no-status');
}
args.push(done);
var argsAdd = ['add'];
if (options.force) {
argsAdd.push('--force');
}
function addFiles(files, cb) {
async.forEachSeries(files.src, addFile, cb);
}
function addFile(file, cb) {
var localArgs = argsAdd.slice(); // create a copy
localArgs.push(file);
localArgs.push(cb);
exec.apply(null, localArgs);
}
function checkStaged(cb) {
exec('diff', '--cached', '--exit-code', function (err, result, code) {
cb(null, code);
});
}
async.forEachSeries(task.files, addFiles, function (err) {
if (err) {
return done(err);
}
checkStaged(function (err, staged) {
if (err) {
return done(err);
}
if (!options.ignoreEmpty || staged) {
exec.apply(null, args);
} else {
done();
}
});
});
};
module.exports.description = 'Commit a git repository.';