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; }) ); };