|
module.exports = PullSummary;
|
|
/**
|
* The PullSummary is returned as a response to getting `git().pull()`
|
*
|
* @constructor
|
*/
|
function PullSummary () {
|
this.files = [];
|
this.insertions = {};
|
this.deletions = {};
|
|
this.summary = {
|
changes: 0,
|
insertions: 0,
|
deletions: 0
|
};
|
|
this.created = [];
|
this.deleted = [];
|
}
|
|
/**
|
* Array of files that were created
|
* @type {string[]}
|
*/
|
PullSummary.prototype.created = null;
|
|
/**
|
* Array of files that were deleted
|
* @type {string[]}
|
*/
|
PullSummary.prototype.deleted = null;
|
|
/**
|
* The array of file paths/names that have been modified in any part of the pulled content
|
* @type {string[]}
|
*/
|
PullSummary.prototype.files = null;
|
|
/**
|
* A map of file path to number to show the number of insertions per file.
|
* @type {Object}
|
*/
|
PullSummary.prototype.insertions = null;
|
|
/**
|
* A map of file path to number to show the number of deletions per file.
|
* @type {Object}
|
*/
|
PullSummary.prototype.deletions = null;
|
|
/**
|
* Overall summary of changes/insertions/deletions and the number associated with each
|
* across all content that was pulled.
|
* @type {Object}
|
*/
|
PullSummary.prototype.summary = null;
|
|
PullSummary.FILE_UPDATE_REGEX = /^\s*(.+?)\s+\|\s+\d+\s*(\+*)(-*)/;
|
PullSummary.SUMMARY_REGEX = /(\d+)\D+((\d+)\D+\(\+\))?(\D+(\d+)\D+\(-\))?/;
|
PullSummary.ACTION_REGEX = /(create|delete) mode \d+ (.+)/;
|
|
PullSummary.parse = function (text) {
|
var pullSummary = new PullSummary;
|
var lines = text.split('\n');
|
|
while (lines.length) {
|
var line = lines.shift().trim();
|
if (!line) {
|
continue;
|
}
|
|
update(pullSummary, line) || summary(pullSummary, line) || action(pullSummary, line);
|
}
|
|
return pullSummary;
|
};
|
|
function update (pullSummary, line) {
|
|
var update = PullSummary.FILE_UPDATE_REGEX.exec(line);
|
if (!update) {
|
return false;
|
}
|
|
pullSummary.files.push(update[1]);
|
|
var insertions = update[2].length;
|
if (insertions) {
|
pullSummary.insertions[update[1]] = insertions;
|
}
|
|
var deletions = update[3].length;
|
if (deletions) {
|
pullSummary.deletions[update[1]] = deletions;
|
}
|
|
return true;
|
}
|
|
function summary (pullSummary, line) {
|
if (!pullSummary.files.length) {
|
return false;
|
}
|
|
var update = PullSummary.SUMMARY_REGEX.exec(line);
|
if (!update || (update[3] === undefined && update[5] === undefined)) {
|
return false;
|
}
|
|
pullSummary.summary.changes = +update[1] || 0;
|
pullSummary.summary.insertions = +update[3] || 0;
|
pullSummary.summary.deletions = +update[5] || 0;
|
|
return true;
|
}
|
|
function action (pullSummary, line) {
|
|
var match = PullSummary.ACTION_REGEX.exec(line);
|
if (!match) {
|
return false;
|
}
|
|
var file = match[2];
|
|
if (pullSummary.files.indexOf(file) < 0) {
|
pullSummary.files.push(file);
|
}
|
|
var container = (match[1] === 'create') ? pullSummary.created : pullSummary.deleted;
|
container.push(file);
|
|
return true;
|
}
|