semver
This commit is contained in:
+92
@@ -0,0 +1,92 @@
|
||||
|
||||
module.exports = DiffSummary;
|
||||
|
||||
/**
|
||||
* The DiffSummary is returned as a response to getting `git().status()`
|
||||
*
|
||||
* @constructor
|
||||
*/
|
||||
function DiffSummary () {
|
||||
this.files = [];
|
||||
this.insertions = 0;
|
||||
this.deletions = 0;
|
||||
this.changed = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Number of lines added
|
||||
* @type {number}
|
||||
*/
|
||||
DiffSummary.prototype.insertions = 0;
|
||||
|
||||
/**
|
||||
* Number of lines deleted
|
||||
* @type {number}
|
||||
*/
|
||||
DiffSummary.prototype.deletions = 0;
|
||||
|
||||
/**
|
||||
* Number of files changed
|
||||
* @type {number}
|
||||
*/
|
||||
DiffSummary.prototype.changed = 0;
|
||||
|
||||
DiffSummary.parse = function (text) {
|
||||
var line, handler;
|
||||
|
||||
var lines = text.trim().split('\n');
|
||||
var status = new DiffSummary();
|
||||
|
||||
var summary = lines.pop();
|
||||
if (summary) {
|
||||
summary.trim().split(', ').forEach(function (text) {
|
||||
var summary = /(\d+)\s([a-z]+)/.exec(text);
|
||||
if (!summary) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (/files?/.test(summary[2])) {
|
||||
status.changed = parseInt(summary[1], 10);
|
||||
}
|
||||
else {
|
||||
status[summary[2].replace(/s$/, '') + 's'] = parseInt(summary[1], 10);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
while (line = lines.shift()) {
|
||||
textFileChange(line, status.files) || binaryFileChange(line, status.files);
|
||||
}
|
||||
|
||||
return status;
|
||||
};
|
||||
|
||||
function textFileChange (line, files) {
|
||||
line = line.trim().match(/^(.+)\s+\|\s+(\d+)(\s+[+\-]+)?$/);
|
||||
|
||||
if (line) {
|
||||
var alterations = (line[3] || '').trim();
|
||||
files.push({
|
||||
file: line[1].trim(),
|
||||
changes: parseInt(line[2], 10),
|
||||
insertions: alterations.replace(/-/g, '').length,
|
||||
deletions: alterations.replace(/\+/g, '').length,
|
||||
binary: false
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function binaryFileChange (line, files) {
|
||||
line = line.match(/^(.+) \|\s+Bin ([0-9.]+) -> ([0-9.]+) ([a-z]+)$/);
|
||||
if (line) {
|
||||
files.push({
|
||||
file: line[1].trim(),
|
||||
before: +line[2],
|
||||
after: +line[3],
|
||||
binary: true
|
||||
});
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user