simple-git
Version:
Simple GIT interface for node.js
73 lines (58 loc) • 1.85 kB
JavaScript
module.exports = ListLogSummary;
var DiffSummary = require('./DiffSummary');
/**
* The ListLogSummary is returned as a response to getting `git().log()` or `git().stashList()`
*
* @constructor
*/
function ListLogSummary (all) {
this.all = all;
this.latest = all.length && all[0] || null;
this.total = all.length;
}
/**
* Detail for each of the log lines
* @type {ListLogLine[]}
*/
ListLogSummary.prototype.all = null;
/**
* Most recent entry in the log
* @type {ListLogLine}
*/
ListLogSummary.prototype.latest = null;
/**
* Number of items in the log
* @type {number}
*/
ListLogSummary.prototype.total = 0;
function ListLogLine (line, fields) {
for (var k = 0; k < fields.length; k++) {
this[fields[k]] = line[k] || '';
}
}
/**
* When the log was generated with a summary, the `diff` property contains as much detail
* as was provided in the log (whether generated with `--stat` or `--shortstat`.
* @type {DiffSummary}
*/
ListLogLine.prototype.diff = null;
ListLogSummary.START_BOUNDARY = 'òòòòòò ';
ListLogSummary.COMMIT_BOUNDARY = ' òò';
ListLogSummary.SPLITTER = ' ò ';
ListLogSummary.parse = function (text, splitter, fields) {
fields = fields || ['hash', 'date', 'message', 'refs', 'author_name', 'author_email'];
return new ListLogSummary(
text
.trim()
.split(ListLogSummary.START_BOUNDARY)
.filter(function(item) { return !!item.trim(); })
.map(function (item) {
var lineDetail = item.trim().split(ListLogSummary.COMMIT_BOUNDARY);
var listLogLine = new ListLogLine(lineDetail[0].trim().split(splitter), fields);
if (lineDetail.length > 1 && !!lineDetail[1].trim()) {
listLogLine.diff = DiffSummary.parse(lineDetail[1]);
}
return listLogLine;
})
);
};